
    -i4                         d dl mZ d dlmZ d dl mZmZmZmZ d dlm	Z	 d dl
Z
d dlZ G d d          Zd Zd Zd	 Zd
 Zedk    r e             dS dS )    N)stack)FEHLAMAINHARAKATareprc                   ~    e Zd ZdZd Zed             Zed             Zed             Zed             Z	d Z
dd	Zd
S )	rootsDictz lookup for root list c                     d S N )selfs    R/var/www/html/speakWrite/venv/lib/python3.11/site-packages/tashaphyne/rootsdict.py__init__zrootsDict.__init__   s        c                     | t           j        v S ) test if word is a root)roots_constROOTSwords    r   is_rootzrootsDict.is_root   s     {(((r   c                 ,   |                      t          j        t          j        t          j        z             } |                      t          j        d          } |                      t          j        t          j                  } t          j        |           S )r    )	replacearaby
ALEF_MADDAHAMZAALEFTEH_MARBUTAALEF_MAKSURAYEHnormalize_hamzar   s    r   normalize_rootzrootsDict.normalize_root   sb     ||E,ek5:.EFF||E-r22||E.	::$T***r   c                 h    d | D             }|r|} t          t          |           | j                  S )Nc                 8    g | ]}t          |          d k    |S )   len.0xs     r   
<listcomp>z)rootsDict.most_common.<locals>.<listcomp>   s#    222!c!ffkkAkkkr   )key)maxsetcount)lsttrirootss     r   most_commonzrootsDict.most_common   s=    22s222 	C3s88++++r   c                     d | D             S )Nc                 z    g | ]8}t          |          d k    t          |          dk    (t          j        |v6|9S )r(      )r*   r   r    r+   s     r   r.   z6rootsDict.filter_root_length_valid.<locals>.<listcomp>&   sA    VVVaCFFaKKCFFAII%*TUBUBUBUBUBUr   r   )rootss    r   filter_root_length_validz"rootsDict.filter_root_length_valid#   s     WV5VVVVr   c                 r    t          t          j        t          |                     fd| D             }|S )z lookup roots in dictionaryc                     g | ]}|v |	S r   r   )r,   r-   	set_rootss     r   r.   z*rootsDict.lookup_roots.<locals>.<listcomp>+   s    777!YAr   )filterr   r   r1   )r9   acceptedr=   s     @r   lookup_rootszrootsDict.lookup_roots(   s8    4<U44	7777u777r   Fc           
      f    g }g }d} j         } fd|D             } fd|D             }	d |D             }
d |D             }|s|s[                     |	          }t           j        |          }                     ||dd|	|	||           |                    |           |s|s[                     |          }t           j        |          }|                    |                                ||dd	||||           |r|r                     |          S |r                     |          S d
S )z" test an algorithm to choose rootsTc                 F    g | ]}                     |d                    S stemr%   r,   dr   s     r   r.   z)rootsDict.choose_root.<locals>.<listcomp>9   +    JJJQ$%%ai00JJJr   c                 F    g | ]}                     |d                    S rootrE   rF   s     r   r.   z)rootsDict.choose_root.<locals>.<listcomp>:   rH   r   c                     g | ]
}|d          S )prefixr   r,   rG   s     r   r.   z)rootsDict.choose_root.<locals>.<listcomp>;       :::QQx[:::r   c                     g | ]
}|d          S )suffixr   rN   s     r   r.   z)rootsDict.choose_root.<locals>.<listcomp><   rO   r      default   zdefault as stemr   )algosr:   r>   r   
debug_algoextendr5   )r   r   affixation_listdebugr?   all_acceptedall_algorU   stemsr9   prefixessuffixes	roots_tmps   `            r   choose_rootzrootsDict.choose_root.   s   
 
JJJJ/JJJJJJJ/JJJ::/:::::/:::  
	*8 
	*
 66u==IdlI66HOOE4YuiQYZZZ)))  	c8 	c 66u==It|Y77H)))OOE4->uiYabbb  	 	$$\222 	$$X...2r   N)F)__name__
__module____qualname____doc__r   staticmethodr   r%   r5   r:   r@   r`   r   r   r   r   r      s            ) ) \) + + \+ , , \, W W \W  1 1 1 1 1 1r   r   c           
      	   d}t          t          |                     d}t          t          |                     ddlm}  |            }g d}t	          d          }t          d           t          t          |                              d                              d	                     |D ]	}t          d
|z             |                    |           |	                    |           t          |
                                           |
                                }g }|D ]0}|\  }	}
|                    |                    |	|
                     1t          d           t          d                    |                                        d	           t          t          |          }t          d           t          d                    |                                        d	           |D ]E}t          |d                    t          |                                        d	                     F|                                }d |D             }t          dd                    |          z             |D ]E}t          |d                    t          |                                        d	                     Ft          t          |                              dd                              d                              d	                     t          d           t          t          |                              dd                              d                              d	                     d |D             }t          dd                    |          z             t%          t          t          |                    }t          dd                    |          z             |sg }|D ]$}|                    t	          |                     %t          dd                    |          z             t%          t          t          |                    }t          dd                    |          z             t          d|                                z             dS )Nu
   لعلهمu   علمr   ArabicLightStemmer)   أفتضاربانني   بأبأ   يريدون   يستطعن   كتاب   بالميدان   بالأسيهمu   رمextendezunicode-escapeutf8**********%s*********z
star stems	zfiltred star stemc                     g | ]
}|d          S rC   r   rN   s     r   r.   ztest1.<locals>.<listcomp>   s    444q6444r   zCandidats stems%sz},z},
reducec                 8    g | ]}t          |d                    S rJ   rE   rN   s     r   r.   ztest1.<locals>.<listcomp>   s$    DDDq&	**DDDr   zCandidats %szaccepted %szCandidats extended %szaccepted level2 %szroot %s)printr   tashaphyne.stemmingrh   extend_rootreprdecodeencode
light_stemsegmentget_segment_listappendget_starstemjoinr>   valid_starstemget_affix_listr   r1   rW   get_root)argsr   rh   aslwordsextseg_liststarstem_listsegleftrightfiltered_starstem_liststrX   r\   r9   r?   extended_rootsr-   s                      r   test1r   b   sk   D	'$--D	'$-- 766666



C  E g

C	9	$s))

+
,
,
3
3F
;
;<<< +( +(&t+,,,tDc""$$%%%'')) 	@ 	@CKD%  !1!1$!>!>????luzz-(())00888 &~} E E!"""uzz0112299&AAA 	E 	EB"ejj!3!344;;FCCDDDD++--44O444"5::e#4#44555 	G 	GB2uzz."4"455<<VDDFFFFtO$$,,T&99@@AQRRYYZ`aabbbhd?##++D88??@PQQXXY_``aaaDDODDD~ejj///000vgu--..}UZZ111222 	>  N 6 6%%k!nn5555*5::n+E+EEFFF6'>;;<<H'

8(<(<<===i&''''1r   c                     ddl m}   |             }g d}|D ]\  }}t          d|z             |                    |           |                    |           t          |                                           |                                }|                                }g }|                                }t          ||d          }t          |||k               dS )Nr   rg   )	ri   u   ضرب)rj   u   بءبء)rk      ريد)rl   r   )rm   u   كتب)rn   u   ميد)ro   u   سهم)u
   آخرين   ءخر)u   بالأخرةr   rr   TrY   )rx   rh   rw   r}   r~   r   r   r`   )	rh   r   r   r   rK   r   r   affixa_listroot_results	            r   test2r      s   666666



C
 
 
E  0 0
d&t+,,,tDc""$$%%%''))''))((**!$4@@@k;$.////1r   c                 >    t                    fd| D             S )z
    c                     g | ]}|v|	S r   r   )r,   itemseconds     r   r.   zdiff.<locals>.<listcomp>   s#    999Td&&8&8D&8&8&8r   )r1   )firstr   s    `r   diffr      s*     [[F9999U9999r   c            	      8   ddl m}  ddlm}  |            }t	                      }g d}|D ]6\  }}t          d|z                      d                     |                    |           |                    |           t          |	                                           |	                                }g }|
                                }	d |	D             }
t          d                    |
                              d                     |                    ||	d	
          }t          d|                    d          d|                    d          ||k               8ddg}|D ]a}|                    |          }t          d                    |d                    |          g                              d                     bt          dt          |j                             t          dt          t!          |j        t"          j                                       t          dt          t!          t"          j        |j                                       t          dt'          d |j                                        D                                  t          dt          |j                             t          dt          t!          |j        t"          j                                       t          dt          t!          t"          j        |j                                       t          dt'          d |j                                        D                                  t          dt          t"          j                             dS )Nr   r   rg   )gr   )u   وتقل   قول)u
   وتقلنr   )u
   وليقلr   )u   ولتقلناr   )u   لتقلr   )u   تقلr   )u   ونقلr   )u
   ولنقلr   )u   فتقلr   )u   ستقلr   )u
   ستقلنr   )u   وستقلنr   )u
   فستقلr   )u   وقالواr   )u
   قالواr   )u
   وقالاr   )u   قالاr   )u
   وقالتr   )u   قالتr   )u
   ويقالr   )u   يقالr   )u   وسيقالr   )u
   سيقالr   )u
   ويقلنr   )u   يقلنr   )u   ويقلناr   )u
   يقلناr   )u
   وتقالr   )u   تقالr   )u   وقالr   )u   قالr   )u   وسأقولr   )u
   سأقولr   )u
   وقائلr   )u   قائلr   )u   وقائلانr   )u   قائلانr   )u   وقائلونr   )u   قائلونr   )u   وقائلاr   )u
   قائلاr   )u
   ومقالr   )u   مقالr   )u   وقائلتانr   )u   قائلتانr   )u   يعد   وعد)   تعد   عدد)u
   نعدهمr   )u   وتعدهمr   )u
   تعدهمr   )u   وستعدهمr   )u   ستعدهمr   )u   وتعدهماr   )u   تعدهماr   )u   ويعدهمr   )u
   يعدهمr   )u   ويعدهماr   )u   يعدهماr   )u   وسيعدهمr   )u   سيعدهمr   )u   وسيعدهماr   )u   سيعدهماr   )u   ولنعدهمr   )u   لنعدهمr   )u   ولنعدهماr   )u   لنعدهماr   )u   ولتعدهمr   )u   لتعدهمr   )u   ولتعدهماr   )u   لتعدهماr   )u   ولتعدهاr   )u   لتعدهاr   )u   وستعدهاr   )u   ستعدهاr   )u   ووعدهاr   )u
   وعدهاr   )u   ووعدهمr   )u
   وعدهمr   )u   ووعدهماr   )u   وعدهماr   )u   وتعدr   )r   r   )u   وتعدنيr   )u
   تعدنيr   )u   وتعدناr   )u
   تعدناr   )u
   وتعدهr   )u   تعدهr   )u   وواعدناهمr   )u   واعدناهمr   )u   ووعدناهمr   )u   وعدناهمr   )u   وتعدوهمr   )u   تعدوهمr   )u
   يعتادu   عود)u   أحست   حسس)u
   يحسونr   )u   ثقة   وثق)u   ثقاتr   )u
   بثقاتr   )u   صفاتu   وصف)u
   صلاتهu   وصلrr   rq   c                     g | ]
}|d          S rC   r   rN   s     r   r.   ztest3.<locals>.<listcomp>k  s    111!F)111r    Tr   z	Test rootz
found rootu   قلu   دعrs   ;zstamped rootszstamped roots diff newzstamped roots removedzstamped roots max lengthc              3   @   K   | ]\  }}t          |          ||fV  d S r   r)   r,   kvs      r   	<genexpr>ztest3.<locals>.<genexpr>z  s2      )b)bSQq3q661a.)b)b)b)b)b)br   zvirtual rootszvirtual roots diffzvirtual roots removed zvirtual roots max lengthc              3   @   K   | ]\  }}t          |          ||fV  d S r   r)   r   s      r   r   ztest3.<locals>.<genexpr>~  s2      )c)cCAa3q66!Q-)c)c)c)c)c)cr   z	all roots)pyarabic.arabreprr	   rx   rh   rootDictrw   r|   r}   r~   r   r   r   r`   ry   r*   
STAMP_DICTr   r   r   r0   	iteritemsVIRTUAL_DICT)r	   rh   r   rooterr   r   rK   r   r   r   r\   r   r9   rtextendeds                  r   test3r      s[   ''''''666666



CZZFR R REf  t t
d',44V<<===tDc""$$'''''))((**11[111dii%%f--...(({$(GGk+,,V44l;CUCUV\C]C]_jnr_rssssE  D D%%b))ejj"dii11233::6BBCCCC	/3v022333	
"CV->{?P(R(R$S$STTT	
!3tK,=v?P'R'R#S#STTT	
$c)b)bFDUD_D_DaDa)b)b)b&b&bccc	/3v233444	
D)<[=N$P$P Q QRRR	
"C[->@S(U(U$V$VWWW	
$c)c)c6CVC`C`CbCb)c)c)c&c&cddd	+s;,--... 1r   __main__)pyarabic.arabyr   pyarabicr   r   r   r   r   r   r	   rer   r   r   r   r   r   ra   r   r   r   <module>r      s  
             1 1 1 1 1 1 1 1 1 1 1 1 # # # # # # 				    T T T T T T T TnC C CJ  :: : :y y yt z	EGGGGG r   