Ë
    çÍ:jH/  ã                   ó„   — d Z ddlZddlZddlmZ dd„Zd„ Zd„ Zd„ Z	 G d„ d	«      Z
d
„ Zd„ Zefd„Zefd„Zi add„Zd„ Zy)z0
Utility functions and classes for classifiers.
é    N)ÚLazyMapc                 ó€   ‡ — |€|xr t        |d   t        t        f«      }|rˆ fd„}t        ||«      S t        ‰ |«      S )aÖ  
    Use the ``LazyMap`` class to construct a lazy list-like
    object that is analogous to ``map(feature_func, toks)``.  In
    particular, if ``labeled=False``, then the returned list-like
    object's values are equal to::

        [feature_func(tok) for tok in toks]

    If ``labeled=True``, then the returned list-like object's values
    are equal to::

        [(feature_func(tok), label) for (tok, label) in toks]

    The primary purpose of this function is to avoid the memory
    overhead involved in storing all the featuresets for every token
    in a corpus.  Instead, these featuresets are constructed lazily,
    as-needed.  The reduction in memory overhead can be especially
    significant when the underlying list of tokens is itself lazy (as
    is the case with many corpus readers).

    :param feature_func: The function that will be applied to each
        token.  It should return a featureset -- i.e., a dict
        mapping feature names to feature values.
    :param toks: The list of tokens to which ``feature_func`` should be
        applied.  If ``labeled=True``, then the list elements will be
        passed directly to ``feature_func()``.  If ``labeled=False``,
        then the list elements should be tuples ``(tok,label)``, and
        ``tok`` will be passed to ``feature_func()``.
    :param labeled: If true, then ``toks`` contains labeled tokens --
        i.e., tuples of the form ``(tok, label)``.  (Default:
        auto-detect based on types.)
    r   c                 ó$   •—  ‰| d   «      | d   fS )Nr   é   © )Úlabeled_tokenÚfeature_funcs    €úg/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/nltk/classify/util.pyÚ	lazy_funcz!apply_features.<locals>.lazy_funcA   s   ø€ Ù  ¨qÑ!1Ó2°MÀ!Ñ4DÐEÐEó    )Ú
isinstanceÚtupleÚlistr   )r	   ÚtoksÚlabeledr   s   `   r
   Úapply_featuresr      sI   ø€ ðB €ØÒ=œ: d¨1¡g´´t¨}Ó=ˆÙô	Fô �y $Ó'Ð'ä�| TÓ*Ð*r   c                 óJ   — t        | D ��ch c]  \  }}|’Œ	 c}}«      S c c}}w )a!  
    :return: A list of all labels that are attested in the given list
        of tokens.
    :rtype: list of (immutable)
    :param tokens: The list of classified tokens from which to extract
        labels.  A classified token has the form ``(token, label)``.
    :type tokens: list
    )r   )ÚtokensÚtokÚlabels      r
   Úattested_labelsr   I   s!   € ô ¨F×3™L˜S %’%Ó3Ó4Ð4ùÓ3s   ‹
c                 ó  — | j                  |D ��cg c]  \  }}|‘Œ	 c}}«      }t        ||«      D ���cg c]  \  \  }}}|j                  |«      ‘Œ }}}}t        j                  t        |«      t        |«      z  «      S c c}}w c c}}}w ©N)Úprob_classify_manyÚzipÚprobÚmathÚlogÚsumÚlen)Ú
classifierÚgoldÚfsÚlÚresultsÚpdistÚlls          r
   Úlog_likelihoodr(   U   st   € Ø×+Ñ+¸t×,D±G°R¸ªRÓ,DÓE€GÜ03°D¸'Ó0B×	CÐ	CÑ,™W˜b ! eˆ%�*‰*�Q�-Ð	C€BÒ	CÜ�8‰8”C˜“Gœc "›gÑ%Ó&Ð&ùó -EùÜ	Cs
   ‘B
µBc                 óä   — | j                  |D ��cg c]  \  }}|‘Œ	 c}}«      }t        ||«      D ���cg c]  \  \  }}}||k(  ‘Œ }}}}|rt        |«      t        |«      z  S yc c}}w c c}}}w )Nr   )Úclassify_manyr   r   r    )r!   r"   r#   r$   r%   ÚrÚcorrects          r
   Úaccuracyr-   [   sl   € Ø×&Ñ&¸$×'?©w°°AªÓ'?Ó@€GÜ*-¨d°GÓ*<×=Ð=™,™7˜B  Aˆq�A‹vÐ=€GÒ=ÙÜ�7‹|œc '›lÑ*Ð*àùó (@ùÜ=s
   ‘A%
µA+c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚCutoffCheckerzÉ
    A helper class that implements cutoff checks based on number of
    iterations and log likelihood.

    Accuracy cutoffs are also implemented, but they're almost never
    a good idea to use.
    c                 ó®   — |j                  «       | _        d|v rt        |d   «       |d<   d|v rt        |d   «      |d<   d | _        d | _        d| _        y )NÚmin_llÚmin_lldeltar   )ÚcopyÚcutoffsÚabsr'   ÚaccÚiter)Úselfr4   s     r
   Ú__init__zCutoffChecker.__init__m   s_   € Ø—|‘|“~ˆŒØ�wÑÜ!$ W¨XÑ%6Ó!7Ð 7ˆG�HÑØ˜GÑ#Ü%(¨°Ñ)?Ó%@ˆG�MÑ"ØˆŒØˆŒØˆ�	r   c                 óv  — | j                   }| xj                  dz  c_        d|v r| j                  |d   k\  ryt        j                  j                  j                  ||«      }t        j                  |«      ryd|v sd|v rCd|v r	||d   k\  ryd|v r+| j                  r|| j                  z
  t        |d   «      k  ry|| _        d|v sd|v rnt        j                  j                  j                  ||«      }d|v r	||d   k\  ryd|v r+| j                  r|| j                  z
  t        |d   «      k  ry|| _
        yy )	Nr   Úmax_iterTr1   r2   Úmax_accÚmin_accdeltaF)r4   r7   ÚnltkÚclassifyÚutilr(   r   Úisnanr'   r5   r6   )r8   r!   Ú
train_toksr4   Únew_llÚnew_accs         r
   ÚcheckzCutoffChecker.checkw   s6  € Ø—,‘,ˆØ�	Š	�Q‰�	Ø˜Ñ  T§Y¡Y°'¸*Ñ2EÒ%EØä—‘×#Ñ#×2Ñ2°:¸zÓJˆÜ�:‰:�fÔØà�wÑ -°7Ñ":Ø˜7Ñ" v°¸Ñ1BÒ'BØà Ñ(Ø—G’GØ˜tŸw™wÑ&¬3¨w°}Ñ/EÓ+FÒFàØˆDŒGà˜Ñ >°WÑ#<Ü—m‘m×(Ñ(×7Ñ7¸
ÀJÓOˆGØ˜GÑ#¨°7¸9Ñ3EÒ(EØà 'Ñ)Ø—H’HØ §¡Ñ(¬S°¸Ñ1HÓ-IÒIàØˆDŒHàð $=r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r9   rE   r   r   r
   r/   r/   d   s   „ ñòó!r   r/   c                 óô   — i }d|d<   | d   j                  «       |d<   | d   j                  «       |d<   dD ]?  }| j                  «       j                  |«      |d|z  <   || j                  «       v |d	|z  <   ŒA |S )
NTÚalwaysonr   Ú
startswithéÿÿÿÿÚendswithÚabcdefghijklmnopqrstuvwxyzú	count(%s)úhas(%s)©ÚlowerÚcount©ÚnameÚfeaturesÚletters      r
   Únames_demo_featuresrY       sŠ   € Ø€HØ€HˆZÑØ! !™WŸ]™]›_€Hˆ\ÑØ ™8Ÿ>™>Ó+€HˆZÑØ.ò >ˆØ)-¯©«×);Ñ);¸FÓ)Cˆ�˜vÑ%Ñ&Ø'-°·±³Ð'=ˆ�˜VÑ#Ò$ð>ð €Or   c                 ól  — i }d|d<   | d   j                  «       dv |d<   | d   j                  «       dv |d<   dD ]w  }| j                  «       j                  |«      |d	|z  <   || j                  «       v |d
|z  <   || d   j                  «       k(  |d|z  <   || d   j                  «       k(  |d|z  <   Œy |S )NTrK   r   Úaeiouyzstartswith(vowel)rM   zendswith(vowel)rO   rP   rQ   zstartswith(%s)zendswith(%s)rR   rU   s      r
   Úbinary_names_demo_featuresr\   «   sÖ   € Ø€HØ€HˆZÑØ$(¨¡G§M¡M£O°xÐ$?€HÐ Ñ!Ø"& r¡(§.¡.Ó"2°hÐ">€HÐÑØ.ò GˆØ)-¯©«×);Ñ);¸FÓ)Cˆ�˜vÑ%Ñ&Ø'-°·±³Ð'=ˆ�˜VÑ#Ñ$Ø.4¸¸Q¹¿¹»Ñ.GˆÐ! FÑ*Ñ+Ø,2°d¸2±h·n±nÓ6FÑ,Fˆ� &Ñ(Ò)ð	Gð
 €Or   c           
      ó   — dd l }ddlm} |j                  d«      D �cg c]  }|df‘Œ c}|j                  d«      D �cg c]  }|df‘Œ c}z   }|j	                  d«       |j                  |«       |d d }|dd	 }t        d
«        | |D ��	cg c]  \  }}	 ||«      |	f‘Œ c}	}«      }
t        d«       t        |
|D ��	cg c]  \  }}	 ||«      |	f‘Œ c}	}«      }t        d|z  «       	 |D ��	cg c]  \  }}	 ||«      ‘Œ }}}	|
j                  |«      }t        ||«      D ���cg c]  \  \  }}}|j                  |«      ‘Œ }}}}t        dt        |«      t        |«      z  z  «       t        «        t        d«       t        t        ||«      «      d d D ]A  \  \  }}}|dk(  rd}nd}t        |||j                  d«      |j                  d«      fz  «       ŒC 	 |
S c c}w c c}w c c}	}w c c}	}w c c}	}w c c}}}w # t        $ r Y |
S w xY w)Nr   ©Únamesúmale.txtÚmaleú
female.txtÚfemaleé@â iˆ  i|  úTraining classifier...úTesting classifier...úAccuracy: %6.4fúAvg. log likelihood: %6.4fúMUnseen Names      P(Male)  P(Female)
----------------------------------------é   ú  %-15s *%6.4f   %6.4fú  %-15s  %6.4f  *%6.4f)ÚrandomÚnltk.corpusr_   ÚwordsÚseedÚshuffleÚprintr-   r   r   Úlogprobr   r    r   r   ÚNotImplementedError)ÚtrainerrW   rm   r_   rV   ÚnamelistÚtrainÚtestÚnÚgr!   r6   Útest_featuresetsÚpdistsr"   r&   r'   ÚgenderÚfmts                      r
   Ú
names_demor   ¸   s  € Ûå!ð ,1¯;©;°zÓ+BÖC 4��v’ÒCØ%*§[¡[°Ó%>öGØ!ˆˆxÒòGñ €Hð
 ‡K�K�ÔØ
‡N�N�8ÔØ�U�dˆO€EØ�D˜Ð€Dô 
Ð
"Ô#Ù¸×?©v°°1™8 A›;¨Ò*Ó?Ó@€Jô 
Ð
!Ô"Ü
�:¸t×D±V°a¸¡¨!£¨aÒ 0ÓDÓ
E€CÜ	Ð
˜cÑ
!Ô"ðØ6:×;©F¨Q°™H Q�KÐ;ÐÑ;Ø×.Ñ.Ð/?Ó@ˆÜ?BÀ4ÈÓ?P×QÐQÑ&;¡|¨¨d°Uˆe�m‰m˜DÕ!ÐQˆÒQÜÐ*¬c°"«g¼¸D»	Ñ.AÑBÔCÜŒÜÐAÔBÜ%)¬#¨d°FÓ*;Ó%<¸R¸aÐ%@ò 	JÑ!‰NˆT�6˜EØ˜ÒØ.‘à.�Ü�#˜˜uŸz™z¨&Ó1°5·:±:¸hÓ3GÐHÑHÕIñ	Jð ÐùòM Dùò Gùó @ùó  Eùó <ùäQøô ò Øð Ðð	úsG   žG¾G"ÂG'
Â>G-Ã)H  Ã.G3Ä $H  Ä$G9ÅBH  Ç3H  È 	HÈHc           
      óT  — dd l }ddlm} |j                  d«      }|j                  d«      }|j	                  d«       |j                  |«       |j                  |«       t        ||d d «      }t        ||dd |d d z   «      }|dd	 D �cg c]  }|d
f‘Œ c}|dd D �cg c]  }|df‘Œ c}z   }	|j                  |	«       t        d«        | ||«      }
t        d«       t        |
|	D ��cg c]  \  }} ||«      |f‘Œ c}}«      }t        d|z  «       	 |	D ��cg c]  \  }} ||«      ‘Œ }}}|
j                  |«      }t        |	|«      D ���cg c]  \  \  }}}|j                  |«      ‘Œ }}}}t        dt        |«      t        |	«      z  z  «       t        «        t        d«       t        |	|«      d d D ]>  \  \  }}}|rd}nd}t        |||j                  d
«      |j                  d«      fz  «       Œ@ 	 |
S c c}w c c}w c c}}w c c}}w c c}}}w # t        $ r Y |
S w xY w)Nr   r^   r`   rb   iñû	 iÐ  iÄ	  iô  i¾
  Tiî  Fre   rf   rg   rh   ri   rj   rk   rl   )rm   rn   r_   ro   rp   rq   Úmaprr   r-   r   r   rs   r   r    r   rt   )ru   rW   rm   r_   Ú
male_namesÚfemale_namesÚpositiveÚ	unlabeledrV   rx   r!   ry   Úmr6   r{   r|   r"   r&   r'   Úis_maler~   s                        r
   Úpartial_names_demorˆ   ç   sB  € Ûå!à—‘˜ZÓ(€JØ—;‘;˜|Ó,€Là
‡K�K�ÔØ
‡N�N�:ÔØ
‡N�N�<Ô ô �8˜Z¨¨Ð.Ó/€Hô �H˜j¨¨dÐ3°lÀ4ÀCÐ6HÑHÓI€Ið &0°°TÐ%:Ö;˜TˆT�4ŠLÒ;Ø".¨s°3Ð"7ö?ØˆˆuŠò?ñ €Dð ‡N�N�4Ôô 
Ð
"Ô#Ù˜ 9Ó-€Jô 
Ð
!Ô"Ü
�:¸t×D±V°a¸¡¨!£¨aÒ 0ÓDÓ
E€CÜ	Ð
˜cÑ
!Ô"ðØ6:×;©F¨Q°™H Q�KÐ;ÐÑ;Ø×.Ñ.Ð/?Ó@ˆÜ?BÀ4ÈÓ?P×QÐQÑ&;¡|¨¨d°Uˆe�m‰m˜DÕ!ÐQˆÒQÜÐ*¬c°"«g¼¸D»	Ñ.AÑBÔCÜŒÜÐAÔBÜ&)¨$°Ó&7¸¸Ð&;ò 	EÑ"‰OˆT�7˜UÙØ.‘à.�Ü�#˜˜uŸz™z¨$Ó/°·±¸EÓ1BÐCÑCÕDñ	Eð ÐùòE <ùò ?ùó  Eùó <ùäQøô ò Øð Ðð	úsC   ÂG=ÂHÃ*HÄH ÄHÄ,$H ÅHÅ.BH ÈH È	H'È&H'c           
      óN  — dd l }ddlm} t        d«       |t        vr5|j                  |«      D �cg c]  }||j                  d   f‘Œ c}t        |<   t        |   d d  }|t        |«      kD  rt        |«      }t        |D ��ch c]  \  }}|’Œ	 c}}«      }	t        ddj                  |	«      z   «       t        d«       |j                  d«       |j                  |«       |d t        d|z  «       }
|t        d|z  «      | }t        d	«        | |
D ��cg c]  \  }} ||«      |f‘Œ c}}«      }t        d
«       t        ||D ��cg c]  \  }} ||«      |f‘Œ c}}«      }t        d|z  «       	 |D ��cg c]  \  }} ||«      ‘Œ }}}|j                  |«      }t        ||«      D ���cg c]  \  \  }}}|j!                  |«      ‘Œ }}}}t        dt#        |«      t        |«      z  z  «       |S c c}w c c}}w c c}}w c c}}w c c}}w c c}}}w # t$        $ r Y |S w xY w)Nr   )ÚsensevalzReading data...z
  Senses: ú zSplitting into test & train...rd   gš™™™™™é?re   rf   rg   rh   )rm   rn   rŠ   rr   Ú_inst_cacheÚ	instancesÚsensesr    r   Újoinrp   rq   Úintr-   r   r   rs   r   rt   )ru   ÚwordrW   ry   rm   rŠ   Úir�   r$   rŽ   rw   rx   r!   r6   r{   r|   rV   r"   r&   r'   s                       r
   Úwsd_demor“   "  s  € Ûå$ô 
Ð
Ôà”;ÑØ7?×7IÑ7IÈ$Ó7OÖP°!˜a §¡¨!¡Ò-ÒPŒ�DÑÜ˜DÑ!¡!Ð$€IØŒ3ˆy‹>ÒÜ�	‹NˆÜ 9×-™˜!˜Q’1Ó-Ó.€FÜ	ˆ,˜Ÿ™ &Ó)Ñ
)Ô*ô 
Ð
*Ô+Ø
‡K�K�ÔØ
‡N�N�9ÔØ�nœ˜C !™G›Ð%€EØ”S˜˜q™“\ AÐ&€Dô 
Ð
"Ô#Ù¸×?©v°°1™8 A›;¨Ò*Ó?Ó@€Jô 
Ð
!Ô"Ü
�:¸t×D±V°a¸¡¨!£¨aÒ 0ÓDÓ
E€CÜ	Ð
˜cÑ
!Ô"ðØ6:×;©F¨Q°™H Q�KÐ;ÐÑ;Ø×.Ñ.Ð/?Ó@ˆÜ?BÀ4ÈÓ?P×QÐQÑ&;¡|¨¨d°Uˆe�m‰m˜DÕ!ÐQˆÒQÜÐ*¬c°"«g¼¸D»	Ñ.AÑBÔCð
 ÐùòE Qùó .ùó @ùó  Eùó <ùäQøäò Øð Ðð	úsG   ±G3ÂG8
ÄG>
ÅHÅ1H Å6H
Æ$H Æ,HÇ
'H È
H È	H$È#H$c                  ób   — 	 t          y# t        $ r} t        d«      }t        |«      | ‚d} ~ ww xY w)z8
    Checks whether the MEGAM binary is configured.
    z\Please configure your megam binary first, e.g.
>>> nltk.config_megam('/usr/bin/local/megam')N)Ú
_megam_binÚ	NameErrorÚstr)ÚeÚerr_msgs     r
   Úcheck_megam_configrš   P  s8   € ð(ÞøÜò (Üð<ó
ˆô ˜Ó  aÐ'ûð(ús   ‚	 ‰	.’)©.r   )iè  )rI   r   Únltk.classify.utilr>   Ú	nltk.utilr   r   r   r(   r-   r/   rY   r\   r   rˆ   rŒ   r“   rš   r   r   r
   ú<module>r�      si   ðñó ó Ý ó*+òZ	5ò'ò÷4ñ 4òxò
ð "5ó ,ð^ *=ó 5ðp €ó+ó\(r   