§
    'ê[f+1  ã                   ó:   — d Z ddlZddlmZ  G d„ de¦  «        ZdS )z�
A word stemmer based on the Lancaster (Paice/Husk) stemming algorithm.
Paice, Chris D. "Another Stemmer." ACM SIGIR Forum 24.3 (1990): 56-61.
é    N)ÚStemmerIc                   óP   — e Zd ZdZdZdd„Zdd„Zd„ Zd„ Zd	„ Z	d
„ Z
d„ Zd„ Zd„ ZdS )ÚLancasterStemmera/  
    Lancaster Stemmer

        >>> from nltk.stem.lancaster import LancasterStemmer
        >>> st = LancasterStemmer()
        >>> st.stem('maximum')     # Remove "-um" when word is intact
        'maxim'
        >>> st.stem('presumably')  # Don't remove "-um" when word is not intact
        'presum'
        >>> st.stem('multiply')    # No action taken if word ends with "-ply"
        'multiply'
        >>> st.stem('provision')   # Replace "-sion" with "-j" to trigger "j" set of rules
        'provid'
        >>> st.stem('owed')        # Word starting with vowel must contain at least 2 letters
        'ow'
        >>> st.stem('ear')         # ditto
        'ear'
        >>> st.stem('saying')      # Words starting with consonant must contain at least 3
        'say'
        >>> st.stem('crying')      #     letters and one of those letters must be a vowel
        'cry'
        >>> st.stem('string')      # ditto
        'string'
        >>> st.stem('meant')       # ditto
        'meant'
        >>> st.stem('cement')      # ditto
        'cem'
        >>> st_pre = LancasterStemmer(strip_prefix_flag=True)
        >>> st_pre.stem('kilometer') # Test Prefix
        'met'
        >>> st_custom = LancasterStemmer(rule_tuple=("ssen4>", "s1t."))
        >>> st_custom.stem("ness") # Change s to t
        'nest'
    )szai*2.za*1.zbb1.zcity3s.zci2>zcn1t>zdd1.zdei3y>zdeec2ss.zdee1.zde2>zdooh4>ze1>zfeil1v.zfi2>zgni3>zgai3y.zga2>zgg1.zht*2.z	hsiug5ct.zhsi3>zi*1.zi1y>zji1d.zjuf1s.zju1d.zjo1d.zjeh1r.zjrev1t.zjsim2t.zjn1d.zj1s.zlbaifi6.zlbai4y.zlba3>zlbi3.zlib2l>zlc1.zlufi4y.zluf3>zlu2.zlai3>zlau3>zla2>zll1.zmui3.zmu*2.zmsi3>zmm1.znois4j>znoix4ct.znoi3>znai3>zna2>znee0.zne2>znn1.zpihs4>zpp1.zre2>zrae0.zra2.zro2>zru2>zrr1.zrt1>zrei3y>zsei3y>zsis2.zsi2>zssen4>zss0.zsuo3>zsu*2.zs*1>zs0.z	tacilp4y.zta2>ztnem4>ztne3>ztna3>ztpir2b.ztpro2b.ztcud1.ztpmus2.ztpec2iv.ztulo2v.ztsis0.ztsi3>ztt1.zuqi3.zugo1.zvis3j>zvie0.zvi2>zylb1>zyli3y>zylp0.zyl2>zygo1.zyhp1.zymo1.zypo1.zyti3>zyte3>zytl2.zyrtsi5.zyra3>zyro3>zyfi3.zycn2t>zyca3>zzi2>zzy1s.NFc                 óB   — i | _         || _        |r|n| j        | _        dS )z,Create an instance of the Lancaster stemmer.N)Úrule_dictionaryÚ_strip_prefixÚdefault_rule_tupleÚ_rule_tuple)ÚselfÚ
rule_tupleÚstrip_prefix_flags      úG/var/www/piapp/venv/lib/python3.11/site-packages/nltk/stem/lancaster.pyÚ__init__zLancasterStemmer.__init__¬   s.   € ð  "ˆÔà.ˆÔà)3ÐP˜:˜:¸Ô9PˆÔÐÐó    c                 ó*  — |r|n| j         }t          j        d¦  «        }i | _        |D ]i}|                     |¦  «        st          d|› d�¦  «        ‚|dd…         }|| j        v r!| j        |                              |¦  «         Œ^|g| j        |<   ŒjdS )a(  Validate the set of rules used in this stemmer.

        If this function is called as an individual method, without using stem
        method, rule_tuple argument will be compiled into self.rule_dictionary.
        If this function is called within stem, self._rule_tuple will be used.

        z^[a-z]+\*?\d[a-z]*[>\.]?$z	The rule z is invalidr   é   N)r
   ÚreÚcompiler   ÚmatchÚ
ValueErrorÚappend)r   r   Ú
valid_ruleÚruleÚfirst_letters        r   Ú
parseRuleszLancasterStemmer.parseRulesµ   sÃ   € ð $.ÐC�Z�Z°4Ô3Cˆ
Ý”ZÐ <Ñ=Ô=ˆ
à!ˆÔàð 	<ð 	<ˆDØ×#Ò# DÑ)Ô)ð @Ý Ð!>¨TÐ!>Ð!>Ð!>Ñ?Ô?Ð?Ø  ! œ9ˆLØ˜tÔ3Ð3Ð3ØÔ$ \Ô2×9Ò9¸$Ñ?Ô?Ð?Ð?à6:°V�Ô$ \Ñ2Ð2ð	<ð 	<r   c                 óÌ   — |                      ¦   «         }| j        r|                      |¦  «        n|}|}| j        s|                      ¦   «          |                      ||¦  «        S )z(Stem a word using the Lancaster stemmer.)Úlowerr   Ú_LancasterStemmer__stripPrefixr   r   Ú_LancasterStemmer__doStemming)r   ÚwordÚintact_words      r   ÚstemzLancasterStemmer.stemÌ   sk   € ð �zŠz‰|Œ|ˆØ+/Ô+=ÐGˆt×!Ò! $Ñ'Ô'Ð'À4ˆð ˆð Ô#ð 	Ø�OŠOÑÔÐà× Ò   {Ñ3Ô3Ð3r   c                 óŠ  — t          j        d¦  «        }d}|�r)|                      |¦  «        }|dk     s||         | j        vrd}nùd}| j        ||                  D ]Û}|                     |¦  «        }|rÂ|                     ¦   «         \  }	}
}}}t          |¦  «        }|                     |	ddd…         ¦  «        r{|
r@||k    r9|                      ||¦  «        r#|  	                    |||¦  «        }d}|dk    rd} n;Œ¢|                      ||¦  «        r#|  	                    |||¦  «        }d}|dk    rd} nŒÜ|dk    rd}|�°)|S )z Perform the actual word stemmingz#^([a-z]+)(\*?)(\d)([a-z]*)([>\.]?)$Tr   FNéÿÿÿÿú.)
r   r   Ú _LancasterStemmer__getLastLetterr   r   ÚgroupsÚintÚendswithÚ_LancasterStemmer__isAcceptableÚ_LancasterStemmer__applyRule)r   r    r!   r   ÚproceedÚlast_letter_positionÚrule_was_appliedr   Ú
rule_matchÚending_stringÚintact_flagÚremove_totalÚappend_stringÚ	cont_flags                 r   Ú__doStemmingzLancasterStemmer.__doStemmingÛ   sÔ  € õ ”ZÐ FÑGÔGˆ
àˆàñ 6	$ð $(×#7Ò#7¸Ñ#=Ô#=Ð ð % qÒ(Ð(ØÐ,Ô-°TÔ5IÐIÐIà��ð $)Ð ð !Ô0°Ð6JÔ1KÔLð #&ð #&�DØ!+×!1Ò!1°$Ñ!7Ô!7�JØ!ð !&ð '×-Ò-Ñ/Ô/ñØ)Ø'Ø(Ø)Ø%õ
 (+¨<Ñ'8Ô'8˜ð  Ÿ=š=¨°t°t¸°tÔ)<Ñ=Ô=ð &Ø*ð &Ø#'¨;Ò#6Ð#6¸4×;NÒ;NØ$(¨,ñ<"ô <"Ð#6ð ,0×+;Ò+;Ø(,¨l¸Mñ,&ô ,& Dð 8<Ð$4Ø'0°CÒ'7Ð'7Ø27¨Ø$) EøØ!%×!4Ò!4°T¸<Ñ!HÔ!Hð &Ø'+×'7Ò'7Ø$(¨,¸ñ("ô (" ð 48Ð 0Ø#,°Ò#3Ð#3Ø.3 GØ % øà# uÒ,Ð,Ø#�Gðm ñ 6	$ðn ˆr   c                 ó‚   — d}t          t          |¦  «        ¦  «        D ]}||                              ¦   «         r|}Œ |S )zHGet the zero-based index of the last alphabetic character in this stringr$   )ÚrangeÚlenÚisalpha)r   r    Úlast_letterÚpositions       r   Ú__getLastLetterz LancasterStemmer.__getLastLetter  sL   € àˆÝ�c $™iœiÑ(Ô(ð 	ð 	ˆHØ�HŒ~×%Ò%Ñ'Ô'ð Ø&��àØÐr   c                 ó®   — d}|d         dv rt          |¦  «        |z
  dk    rd}n/t          |¦  «        |z
  dk    r|d         dv rd}n|d         dv rd}|S )z1Determine if the word is acceptable for stemming.Fr   Úaeiouyé   Té   r   ©r8   )r   r    r2   Úword_is_acceptables       r   Ú__isAcceptablezLancasterStemmer.__isAcceptable%  s�   € à"Ðð �Œ7�hÐÐÝ�4‰yŒy˜<Ñ'¨1Ò,Ð,Ø%)Ð"øõ �‰YŒY˜Ñ%¨Ò*Ð*Ø�AŒw˜(Ð"Ð"Ø%)Ð"Ð"Ø�a”˜HÐ$Ð$Ø%)Ð"Ø!Ð!r   c                 óL   — t          |¦  «        |z
  }|d|…         }|r||z  }|S )z#Apply the stemming rule to the wordr   rA   )r   r    r2   r3   Únew_word_lengths        r   Ú__applyRulezLancasterStemmer.__applyRule6  s<   € õ ˜d™)œ) lÑ2ˆØ�A�oÐ%Ô&ˆð ð 	"Ø�MÑ!ˆDØˆr   c                 ól   — dD ]0}|                      |¦  «        r|t          |¦  «        d…         c S Œ1|S )zYRemove prefix from a word.

        This function originally taken from Whoosh.

        )	ÚkiloÚmicroÚmilliÚintraÚultraÚmegaÚnanoÚpicoÚpseudoN)Ú
startswithr8   )r   r    Úprefixs      r   Ú__stripPrefixzLancasterStemmer.__stripPrefixA  sN   € ð

ð 	+ð 	+ˆFð �Š˜vÑ&Ô&ð +Ø�C ™KœK˜M˜MÔ*Ð*Ð*Ð*ð+àˆr   c                 ó   — dS )Nz<LancasterStemmer>© )r   s    r   Ú__repr__zLancasterStemmer.__repr__V  s   € Ø#Ð#r   )NF)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	   r   r   r"   r   r&   r*   r+   r   rV   rU   r   r   r   r      s¿   € € € € € ð!ð !ðHtÐðlQð Qð Qð Qð<ð <ð <ð <ð.4ð 4ð 4ð>ð >ð >ð@ð ð ð"ð "ð "ð"	ð 	ð 	ðð ð ð*$ð $ð $ð $ð $r   r   )rZ   r   Únltk.stem.apir   r   rU   r   r   ú<module>r\      sj   ððð ð 
€	€	€	à "Ð "Ð "Ð "Ð "Ð "ðF$ð F$ð F$ð F$ð F$�xñ F$ô F$ð F$ð F$ð F$r   