U
    e2                     @   s,   d Z ddlZddlmZ G dd deZdS )a  
ARLSTem Arabic Stemmer
The details about the implementation of this algorithm are described in:
K. Abainia, S. Ouamour and H. Sayoud, A Novel Robust Arabic Light Stemmer ,
Journal of Experimental & Theoretical Artificial Intelligence (JETAI'17),
Vol. 29, No. 3, 2017, pp. 557-573.
The ARLSTem is a light Arabic stemmer that is based on removing the affixes
from the word (i.e. prefixes, suffixes and infixes). It was evaluated and
compared to several other stemmers using Paice's parameters (under-stemming
index, over-stemming index and stemming weight), and the results showed that
ARLSTem is promising and producing high performances. This stemmer is not
based on any dictionary and can be used on-line effectively.
    N)StemmerIc                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )ARLSTemaY  
    ARLSTem stemmer : a light Arabic Stemming algorithm without any dictionary.
    Department of Telecommunication & Information Processing. USTHB University,
    Algiers, Algeria.
    ARLSTem.stem(token) returns the Arabic stem for the input token.
    The ARLSTem Stemmer requires that all tokens are encoded using Unicode
    encoding.
    c                 C   s   t d| _t d| _t d| _ddddg| _dd	d
g| _ddg| _dddg| _ddg| _	ddg| _
ddg| _ddg| _dddg| _ddg| _ddg| _ddg| _dd g| _d!d"d#d$g| _d%d&g| _d'd(d)d*g| _d+d,d-g| _d S ).Nz[\u0622\u0623\u0625]z[\u0649]z[\u064B-\u065F]u   الu   للu   فلu   فبu   بالu   كالu   والu   فللu   وللu   فبالu   وبالu   فكالu   كيu   كمu   هاu   همu   كماu   كنّu   هماu   هنّu   انu   ينu   ونu   تانu   تينu   ستu   سيu   ساu   سنu   لنu   لتu   ليu   لأu   تماu   تنّ   ناu   تمu   تا   وا   ت   ا   ن)recompilere_hamzated_alifre_alifMaqsurare_diacriticspr2pr3pr32pr4su2su22su3su32pl_si2pl_si3verb_su2verb_pr2	verb_pr22	verb_pr33	verb_suf3	verb_suf2	verb_suf1)self r    R/var/www/html/assets/scripts/venv/lib/python3.8/site-packages/nltk/stem/arlstem.py__init__*   s>    









zARLSTem.__init__c              
   C   s   z|dkrt d| |}| |}|dk	r2|}| |}| |}|dkr|| |}|dk	rf|W S |dkr| |W S n|W S |W S  t k
r } zt| W 5 d}~X Y nX dS )zN
        call this function to get the word's stem based on ARLSTem .
        NzUThe word could not be stemmed, because                                  it is empty !)
ValueErrornormprefsuff	plur2singfem2mascverbprint)r   tokenpreZpsfmer    r    r!   stemd   s*    




zARLSTem.stemc                 C   sP   | j d|}| jd|}| jd|}|drLt|dkrL|dd }|S )z
        normalize the word by removing diacritics, replacing hamzated Alif
        with Alif replacing AlifMaqsura with Yaa and removing Waaw at the
        beginning.
         r      يu   و      N)r   subr   r   
startswithlenr   r+   r    r    r!   r$      s    zARLSTem.normc                 C   s   t |dkr2| jD ]}||r|dd   S qt |dkrd| jD ]}||rD|dd   S qDt |dkr| jD ]}||rv|dd   S qvt |dkr| jD ]}||r|dd   S qdS )z<
        remove prefixes from the words' beginning.
           r2   N         )r6   r   r5   r   r   r   )r   r+   Zp3Zp4p2r    r    r!   r%      s     







zARLSTem.prefc                 C   s<  | dr"t|dkr"|dd S t|dkrT| jD ]}| |r4|dd   S q4t|dkr| jD ]}| |rf|dd   S qf| d	rt|dkr|dd }|S t|dkr| jD ]}| |r|dd   S qt|dkr| jD ]}| |r|dd   S q| d
r8t|dkr8|dd S |S )z6
        remove suffixes from the word's end.
        u   كr2   Nr:   r8   u   هr   )endswithr6   r   r   r   r   )r   r+   s2Zs3r    r    r!   r&      s0    







zARLSTem.suffc                 C   s&   | dr"t|dkr"|dd S dS )zR
        transform the word from the feminine form to the masculine form.
        u   ةr2   Nr=   )r@   r6   r7   r    r    r!   r(      s    zARLSTem.fem2mascc                 C   s   t |dkr2| jD ]}||r|dd   S qt |dkrd| jD ]}||rD|dd   S qDt |dkr|dr|dd S t |dkr|dr|d	 dkr|dd	 |dd  S t |dkr|dr|d dkr|d
d |d  S dS )zO
        transform the word from the plural form to the singular form.
        r:   Nr>   r8   r?   r2   u   اتr   r;   r3   r=   )r6   r   r@   r   r5   )r   r+   Zps2Zps3r    r    r!   r'      s    



""zARLSTem.plur2singc                 C   sx   |  |}|dk	r|S | |}|dk	r,|S | |}|dk	rB|S | |}|dk	rX|S | |}|dk	rn|S | |S )z=
        stem the verb prefixes and suffixes or both
        N)verb_t1verb_t2verb_t3verb_t4verb_t5verb_t6)r   r+   Zvbr    r    r!   r)      s     




zARLSTem.verbc                 C   sZ  t |dkr<|dr<| jD ]}||r|dd   S qt |dkrx|drx| jD ]}||rX|dd   S qXt |dkr|drt |dkr|dr|dd S |dr|dd	 S |dr|dd	 S |d
r|dd	 S t |dkr$|dr$|d
r$|dd	 S t |dkrV|drV|d
rV|dd	 S dS )z8
        stem the present prefixes and suffixes
        r8   r   r3   r>   r1   r:   r   r   r=   r   N)r6   r5   r   r@   r   r   r+   rA   r    r    r!   rB      s*    






&&zARLSTem.verb_t1c                 C   s  t |dkr| jD ].}|| jd r||r|dd   S q|| jd rn|| jd rn|dd S || jd r|| jd r|dd S t |dkr|| jd r|dr|dd S t |dkr|| jd r|dr|dd S d	S )
z7
        stem the future prefixes and suffixes
        r9   r   r;   r>   r3   r8   r   r=   N)r6   r   r5   r   r@   rH   r    r    r!   rC     s,    
  

zARLSTem.verb_t2c                 C   s   t |dkr2| jD ]}||r|dd   S qt |dkrd| jD ]}||rD|dd   S qDt |dkr| jD ]}||rv|dd   S qvdS )z+
        stem the present suffixes
        r8   Nr?   r:   r>   r2   r=   )r6   r   r@   r   r   )r   r+   r   r   Zsu1r    r    r!   rD   8  s    





zARLSTem.verb_t3c                 C   sL   t |dkrH| jD ]}||r|dd   S q|drH|dd S dS )z+
        stem the present prefixes
        r2   r3   Nr1   )r6   r   r5   )r   r+   Zpr1r    r    r!   rE   I  s    


zARLSTem.verb_t4c                 C   s\   t |dkrX| jD ]}||r|dd   S q| jD ]}||r8|dd   S q8|S )z*
        stem the future prefixes
        r:   r;   N)r6   r   r5   r   )r   r+   r   r    r    r!   rF   T  s    



zARLSTem.verb_t5c                 C   s6   t |dkr2| jD ]}||r|dd   S q|S )z)
        stem the order prefixes
        r:   r;   N)r6   r   r5   )r   r+   r   r    r    r!   rG   a  s
    

zARLSTem.verb_t6N)__name__
__module____qualname____doc__r"   r/   r$   r%   r&   r(   r'   r)   rB   rC   rD   rE   rF   rG   r    r    r    r!   r       s   	:# r   )rL   r	   Znltk.stem.apir   r   r    r    r    r!   <module>   s   