Ë
    çÍ:jÎ/  ã                   ó2   — d Z ddlZddlmZ  G d„ de«      Zy)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                   óN   — 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y)Ú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.Nc                 óV   — i | _         || _        |r|| _        y| j                  | _        y)z,Create an instance of the Lancaster stemmer.N)Úrule_dictionaryÚ_strip_prefixÚdefault_rule_tupleÚ_rule_tuple)ÚselfÚ
rule_tupleÚstrip_prefix_flags      úh/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/nltk/stem/lancaster.pyÚ__init__zLancasterStemmer.__init__¬   s+   € ð  "ˆÔà.ˆÔá)3˜:ˆÕ¸×9PÑ9PˆÕó    c                 ó.  — |r|n| j                   }t        j                  d«      }i | _        |D ]d  }|j	                  |«      st        d|› d�«      ‚|dd }|| j                  v r| j                  |   j                  |«       ŒU|g| j                  |<   Œf y)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Ÿ   € ñ $.‘Z°4×3CÑ3Cˆ
Ü—Z‘ZÐ <Ó=ˆ
à!ˆÔàò 	<ˆDØ×#Ñ# DÔ)Ü  9¨T¨F°+Ð!>Ó?Ð?Ø  !˜9ˆLØ˜t×3Ñ3Ñ3Ø×$Ñ$ \Ñ2×9Ñ9¸$Õ?à6:°V�×$Ñ$ \Ò2ñ	<r   c                 óÀ   — |j                  «       }| j                  r| j                  |«      n|}|}| j                  s| j	                  «        | j                  ||«      S )z(Stem a word using the Lancaster stemmer.)Úlowerr   Ú_LancasterStemmer__stripPrefixr   r   Ú_LancasterStemmer__doStemming)r   ÚwordÚintact_words      r   ÚstemzLancasterStemmer.stemÌ   sX   € ð �z‰z‹|ˆØ+/×+=Ò+=ˆt×!Ñ! $Ô'À4ˆð ˆð ×#Ò#Ø�O‰OÔà× Ñ   {Ó3Ð3r   c                 ó<  — t        j                  d«      }d}|�r| j                  |«      }|dk  s||   | j                  vrd}nÓd}| j                  ||      D ]¸  }|j	                  |«      }|sŒ|j                  «       \  }	}
}}}t        |«      }|j                  |	ddd…   «      sŒP|
r7||k(  sŒX| j                  ||«      sŒk| j                  |||«      }d}|dk(  rd} n2| j                  ||«      sŒœ| j                  |||«      }d}|dk(  rd} n |sd}|r�Œ|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Û   sx  € ô —Z‘ZÐ FÓGˆ
àˆâà#'×#7Ñ#7¸Ó#=Ð ð % qÒ(ØÐ,Ñ-°T×5IÑ5IÑIà‘ð $)Ð ð !×0Ñ0°Ð6JÑ1KÑLò #&�DØ!+×!1Ñ!1°$Ó!7�JÚ!ð '×-Ñ-Ó/ñØ)Ø'Ø(Ø)Ø%ô
 (+¨<Ó'8˜ð  Ÿ=™=¨±t¸°tÑ)<Õ=Ù*Ø#'¨;Ó#6¸4×;NÑ;NØ$(¨,õ<"ð ,0×+;Ñ+;Ø(,¨l¸Mó,& Dð 8<Ð$4Ø'0°CÒ'7Ø27¨Ù$)Ø!%×!4Ñ!4°T¸<Õ!HØ'+×'7Ñ'7Ø$(¨,¸ó(" ð 48Ð 0Ø#,°Ò#3Ø.3 GÙ %ðG#&ñJ (Ø#�Gók ðl ˆr   c                 ól   — d}t        t        |«      «      D ]  }||   j                  «       r|}Œ |S  |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  sE   € àˆÜœc $›iÓ(ò 	ˆHØ�H‰~×%Ñ%Ô'Ø&‘àØÐð	ð
 Ðr   c                 óŒ   — d}|d   dv rt        |«      |z
  dk\  rd}|S t        |«      |z
  dk\  r|d   dv rd}|S |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˜<Ñ'¨1Ò,Ø%)Ð"ð "Ð!ô �‹Y˜Ñ%¨Ò*Ø�A‰w˜(Ñ"Ø%)Ð"ð "Ð!ð �a‘˜HÑ$Ø%)Ð"Ø!Ð!r   c                 ó:   — 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.__applyRule5  s2   € ô ˜d›) lÑ2ˆØ�A�oÐ&ˆñ Ø�MÑ!ˆDØˆr   c                 óV   — dD ]#  }|j                  |«      sŒ|t        |«      d c S  |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.__stripPrefix@  s9   € ð

ò 	+ˆFð �‰˜vÕ&ØœC ›K˜MÐ*Ò*ð	+ð ˆr   c                  ó   — y)Nz<LancasterStemmer>© )r   s    r   Ú__repr__zLancasterStemmer.__repr__U  s   € Ø#r   )NF)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	   r   r   r"   r   r&   r*   r+   r   rV   rU   r   r   r   r      sA   „ ñ!ðHtÐólQó<ò.4ò=ò~ò"ò"	òó*$r   r   )rZ   r   Únltk.stem.apir   r   rU   r   r   ú<module>r\      s    ðñó 
å "ôE$�xõ E$r   