
    -i,                         d dl Z d dlZd dlmZ d dlZd dlZd dlZ G d d          Zd Ze	dk    r$d dl
Z
 e
j         ee
j                             dS dS )    Nc                       e Zd Zd Zdg dfdZdddg ddfdZd Zdd	Zdd
Zd Z	d Z
ddZd Zd Zd Zd Zg fdZg fdZg fdZg fdZg fdZg fdZdS )genelexc                     t          j                     | _        t          j                    | _        t	          j                    | _        d S N)verb_affixerverb_vocalizernoun_affixernoun_vocalizerstopword_affixerstopword_vocalizerselfs    N/var/www/html/speakWrite/venv/lib/python3.11/site-packages/alyahmor/genelex.py__init__zgenelex.__init__"   s:    *799*799"2"C"E"E    nounTc                 `   |}|dk    r| j                             ||          }n_|dk    r| j                            ||          }n=|dk    r| j                            ||          }n| j                             ||          }|r|                     |          S |                     |          S )a1  
        Generate forms fo a given word with specified affixes
        
        @param word: the input word
        @type word: unicode
        @param type: (noun, verb, stop word): the default is "noun"
        @type type: unicode
        @param affixes: if the result must be vocalized or not, default is True
        @type affixes: boolean
        @param vocalized: if the result must be vocalized or not, default is True
        @type vocalized: boolean
        @return : all vocalized forms of input word
        @rtype:  tuple list, list or dict 
        r   verbstopword)r
   generate_by_affixesr   r   get_vocalized_formsget_unvocalized_forms)r   word	word_typeaffixes	vocalizedwtypeformss          r   r   zgenelex.generate_by_affixes'   s     &==';;D'JJEEF]]';;D'JJEEJ+??gNNEE ';;D'JJE 	5++E222--e444r   F   فتحةc                    |}|dk    r|                      |          }	nN|dk    r|                     ||          }	n1|dk    r|                     |          }	n|                      |          }	|r|                     |	          S |s,|r|                     |	          S |                     |	          S |                     |	          S )ao  
        Generate forms fo a given word
        
        @param word: the input word
        @type word: unicode
        @param type: (noun, verb, stop word): the default is "noun"
        @type type: unicode
        @param vocalized: if the result must be vocalized or not, default is True
        @type vocalized: boolean
        @param indexed: the forms diplayed as dictionary with unvocalized forms as keys, and for 
        each key, we give all possible vocalization
        @type indexed: boolean, default False
        @return : all vocalized forms of input word
        @rtype:  tuple list, list or dict 
        r   r   r   )generate_noun_formsgenerate_verb_formsgenerate_stopword_formsget_vocalized_forms_detailsr   r   get_vocalized_forms_dict)
r   r   r   r   indexedr   detailsfuture_typer   r   s
             r   generate_formszgenelex.generate_formsE   s      &==,,T22EEF]],,T;??EEJ0066EE ,,T22E 	;33E::: 	8 9//66611%88800777r   c                    g }g }|D ]d}|                     d          }t          |          dk    r|d         }|d         }|                    |           |                    |           et          t	          |                    }|                                 t          t	          |                    }|                                 ||fS )z0 return prefixes and suffixes from an affix list-   r      )splitlenappendlistsetsort)r   
affix_listprefixessuffixesaffixaffsprefsuffs           r   separatezgenelex.separate   s     	" 	"E;;s##D4yyA~~AwAwOOD!!!OOD!!!!H&&H&&!!r   c                 0   |}|dk    r|                                  }nJ|dk    r|                                 }n/|dk    r|                                 }n|                                  }|s|r|S |                     |          S |                     |          S )z
        generate affix list for a word type, it can be vocalized or not,
        and can be indexed by unvocalized affixes,
        or get it separated as prefixes and suffixes
        r   r   r   )generate_noun_affix_listgenerate_verb_affix_listgenerate_stopword_affix_listget_unvocalized_affix_listget_vocalized_affixes_dict)r   r   r   r&   r   r4   s         r   generate_affix_listzgenelex.generate_affix_list   s     &==6688JJF]]6688JJJ::<<JJ6688J  	? C!!66zBBB22:>>>r   c                 Z    |                      |||          }|                     |          S r   )rB   r;   )r   r   r   r&   r4   s        r   generate_prefix_suffix_listz#genelex.generate_prefix_suffix_list   s+    --iGLL
}}Z(((r   c                 6    | j                             |          S z generate all possible affixes)r
   r)   r   r   s     r   r!   zgenelex.generate_noun_forms   s     "11$777r   c                 4    | j                                         S z generate all affixes )r
   rB   r   s    r   r=   z genelex.generate_noun_affix_list       "66888r   c                 8    | j                             ||          S rF   )r   r)   )r   r   r(   s      r   r"   zgenelex.generate_verb_forms   s    "11$DDDr   c                 4    | j                                         S rI   r   rB   r   s    r   r>   z genelex.generate_verb_affix_list   rJ   r   c                 4    | j                                         S rI   rM   r   s    r   r>   z genelex.generate_verb_affix_list   rJ   r   c                 6    | j                             |          S rF   )r   r)   rG   s     r   r#   zgenelex.generate_stopword_forms   s     &55d;;;r   c                 4    | j                                         S rI   )r   rB   r   s    r   r?   z$genelex.generate_stopword_affix_list   s    &::<<<r   c                     |sg S d |D             }t          t          |                    }|                                 |S )z display unvocalized formsc                 B    g | ]}t          j        |d                    S r   arabystrip_tashkeel.0ts     r   
<listcomp>z1genelex.get_unvocalized_forms.<locals>.<listcomp>   s'    EEE!5/!55EEEr   r1   r2   r3   )r   r   unvoc_formss      r   r   zgenelex.get_unvocalized_forms   sP     	FIEEuEEEK3{++,,r   c                     |sg S d |D             }t          t          |                    }|                                 |S ) display vocalized formsc                     g | ]
}|d          S rS    rW   s     r   rZ   z/genelex.get_vocalized_forms.<locals>.<listcomp>   s    ---!1---r   r[   r   r   	voc_formss      r   r   zgenelex.get_vocalized_forms   sK     	.I--u---IY((	r   c                 8   i }|rQ|D ]N}t          j        |d                   }||v r"||                             |d                    B|d         g||<   O|D ]A}||                                          t	          t          ||                             ||<   B|S )z> display vocalized forms in a dict indexed by unovaclized formr   )rU   rV   r0   r3   r1   r2   r   r   
forms_dictformunvockeys         r   r%   z genelex.get_vocalized_forms_dict   s    
 	2 2 2,T!W55J&&u%,,T!W5555(,Qz:e$$ 	9 	9CsO  """"3z##7#788JsOOr   c           	          g }|D ]M}|                     |d         |d         t          j        |d                   |d         |d         d           N|S )z* display vocalized forms in a list of dictr   r-   r,      )r   zsemi-vocalizedunvocalized	segmentedtags)r0   rU   rV   )r   r   
forms_listrf   s       r   r$   z#genelex.get_vocalized_forms_details   sr    
 	 	D!!tAw%)!W"'"6tAw"?"? $Q7	# #     r   c                     |sg S d |D             }t          t          |                    }|                                 |S )r^   c                 6    g | ]}t          j        |          S r`   rT   rW   s     r   rZ   z6genelex.get_unvocalized_affix_list.<locals>.<listcomp>  s#    <<<U)!,,<<<r   r[   ra   s      r   r@   z"genelex.get_unvocalized_affix_list  sK     	I<<e<<<	Y((	r   c                 F   i }|r?|D ]<}t          j        |          }||v r||                             |           6|g||<   =|D ]Z}t          ||                   dk    r?||                                          t          t          ||                             ||<   [|S )z$ display vocalized affixes in a dictr,   )rU   rV   r0   r/   r3   r1   r2   rd   s         r   rA   z"genelex.get_vocalized_affixes_dict  s    
 	/ / /,T22J&&u%,,T2222(,w:e$$ 	= 	=C:c?##Q&&3$$&&&"&s:c?';';"<"<
3r   N)r   TF)r   )__name__
__module____qualname__r   r   r)   r;   rB   rD   r!   r=   r"   r>   r#   r?   r   r   r%   r$   r@   rA   r`   r   r   r   r       s         
 392QU 5 5 5 5< .4tU]_kp  I "8 "8 "8 "8H" " "$? ? ? ?0) ) ) )8 8 8
9 9 9E E E E9 9 9
9 9 9< < <
= = = -/     +-     02     35     02     24      r   r   c                    d}t                      }|                    |          }d}|                    |          }d}|                    |          }t	          d           |                                }t          j        |           t	          d           |                                }t          j        |           t	          d           |                                }t          j        |           dS )Nu   قَصْدٌu   قصدu   إلىzNOUN_AFFIX_LIST=zVERB_AFFIX_LIST=zSTOP_AFFIX_LIST=r   )	r   r!   r"   r#   printr=   pprintr>   r?   )	argsr   	generator
noun_forms
verb_forms
stop_formsnoun_affixesverb_affixesstop_affixess	            r   mainr   $  s    D		I..t44JD--d33JD11$77J	5577L
M,	
5577L
M,	
99;;L
M,1r   __main__)	itertoolsrw   pyarabic.arabyrU   r	   r   r   r   r   rr   sysexitargvr`   r   r   <module>r      s   2                       B B B B B B B BH  2 zJJJCHTT#(^^ r   