Ë
    çÍ:jt?  ã                   óÐ   — d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZm	Z	m
Z
 d dlmZ d dlmZ d dlmZ d„ Zd„ Zd	„ Z G d
„ de«      Zedk(  r	 d dlZ ej.                  «        yy)é    N)ÚZipFilePathPointer)Úfind_dirÚ	find_fileÚfind_jars_within_path)ÚParserI)ÚDependencyGraph)Útaggedsents_to_conllc                  ó:   — ddl m}   | g d¢«      }|j                  S )Nr   )ÚRegexpTagger))z\.$ú.)z\,$ú,)z\?$ú?)z\($ú()z\)$ú))z\[$ú[)z\]$ú])z^-?[0-9]+(\.[0-9]+)?$ÚCD)z(The|the|A|a|An|an)$ÚDT)z&(He|he|She|she|It|it|I|me|Me|You|you)$ÚPRP)z(His|his|Her|her|Its|its)$úPRP$)z(my|Your|your|Yours|yours)$r   )z (on|On|in|In|at|At|since|Since)$ÚIN)z (for|For|ago|Ago|before|Before)$r   )z(till|Till|until|Until)$r   )z(by|By|beside|Beside)$r   )z(under|Under|below|Below)$r   )z(over|Over|above|Above)$r   )z (across|Across|through|Through)$r   )z(into|Into|towards|Towards)$r   )z(onto|Onto|from|From)$r   )z.*able$ÚJJ)z.*ness$ÚNN)z.*ly$ÚRB)z.*s$ÚNNS)z.*ing$ÚVBG)z.*ed$ÚVBD)z.*r   )Únltk.tagr   Útag)r   Ú_taggers     úd/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/nltk/parse/malt.pyÚmalt_regex_taggerr"      s!   € Ý%áò	
ó€Gð@ �;‰;Ðó    c                 ól  — t         j                  j                  | «      r| }nt        | d¬«      }g d¢}t	        t        |«      «      }|D �ch c]$  }t         j                  j                  |«      d   ’Œ& }}h d£}|j                  |«      sJ ‚t        t        d„ |«      «      sJ ‚t        |«      S c c}w )zE
    A module to find MaltParser .jar file and its dependencies.
    )ÚMALT_PARSER)Úenv_vars)Ú r'   r'   é   >   ú	log4j.jarú
libsvm.jarúliblinear-1.8.jarc                 óJ   — | j                  d«      xr | j                  d«      S )Nzmaltparser-z.jar)Ú
startswithÚendswith)Úis    r!   ú<lambda>z!find_maltparser.<locals>.<lambda>M   s   € ˜Ÿ™ mÓ4ÒK¸¿¹ÀFÓ9K€ r#   )ÚosÚpathÚexistsr   Úsetr   ÚsplitÚissubsetÚanyÚfilterÚlist)Úparser_dirnameÚ	_malt_dirÚmalt_dependenciesÚ
_malt_jarsÚjarÚ_jarss         r!   Úfind_maltparserr@   =   sª   € ô 
‡w�w‡~�~�nÔ%Ø"‰	ä˜^Ð6FÔGˆ	â$ÐÜÔ*¨9Ó5Ó6€JØ.8Ö9 sŒR�W‰W�]‰]˜3Ó Ó"Ð9€EÐ9ÚHÐà×%Ñ% eÔ,Ð,Ð,ÜÜÑKÈUÓSôð ð ô �
ÓÐùò :s   Á)B1c                 óf   — | €yt         j                  j                  | «      r| S t        | dd¬«      S )z8
    A module to find pre-trained MaltParser model.
    úmalt_temp.mco)Ú
MALT_MODELF)r&   Úverbose)r1   r2   r3   r   )Úmodel_filenames    r!   Úfind_malt_modelrF   R   s2   € ð ÐØÜ	�‰�‰˜Ô	'ØÐä˜°/È5ÔQÐQr#   c                   óZ   — e Zd ZdZ	 	 	 	 d
d„Zdd„Zdd„Zdd„Zedd„«       Z	dd„Z
dd	„Zy)Ú
MaltParseraà  
    A class for dependency parsing with MaltParser. The input is the paths to:
    - (optionally) a maltparser directory
    - (optionally) the path to a pre-trained MaltParser .mco model file
    - (optionally) the tagger to use for POS tagging before parsing
    - (optionally) additional Java arguments

    Example:
        >>> from nltk.parse import malt
        >>> # With MALT_PARSER and MALT_MODEL environment set.
        >>> mp = malt.MaltParser(model_filename='engmalt.linear-1.7.mco') # doctest: +SKIP
        >>> mp.parse_one('I shot an elephant in my pajamas .'.split()).tree() # doctest: +SKIP
        (shot I (elephant an) (in (pajamas my)) .)
        >>> # Without MALT_PARSER and MALT_MODEL environment.
        >>> mp = malt.MaltParser('/home/user/maltparser-1.9.2/', '/home/user/engmalt.linear-1.7.mco') # doctest: +SKIP
        >>> mp.parse_one('I shot an elephant in my pajamas .'.split()).tree() # doctest: +SKIP
        (shot I (elephant an) (in (pajamas my)) .)
    Nc                 óæ   — t        |«      | _        |�|ng | _        t        |«      | _        | j                  dk7  | _        t        j                  «       | _        |�|| _
        yt        «       | _
        y)a  
        An interface for parsing with the Malt Parser.

        :param parser_dirname: The path to the maltparser directory that
            contains the maltparser-1.x.jar
        :type parser_dirname: str
        :param model_filename: The name of the pre-trained model with .mco file
            extension. If provided, training will not be required.
            (see http://www.maltparser.org/mco/mco.html and
            see http://www.patful.com/chalk/node/185)
        :type model_filename: str
        :param tagger: The tagger used to POS tag the raw string before
            formatting to CONLL format. It should behave like `nltk.pos_tag`
        :type tagger: function
        :param additional_java_args: This is the additional Java arguments that
            one can use when calling Maltparser, usually this is the heapsize
            limits, e.g. `additional_java_args=['-Xmx1024m']`
            (see https://javarevisited.blogspot.com/2011/05/java-heap-space-memory-size-jvm.html)
        :type additional_java_args: list
        NrB   )r@   Ú	malt_jarsÚadditional_java_argsrF   ÚmodelÚ_trainedÚtempfileÚ
gettempdirÚworking_dirr"   Útagger)Úselfr:   rE   rQ   rK   s        r!   Ú__init__zMaltParser.__init__r   sj   € ô: )¨Ó8ˆŒð %9Ð$DÑ È"ð 	Ô!ô % ^Ó4ˆŒ
ØŸ
™
 oÑ5ˆŒä#×.Ñ.Ó0ˆÔà &Ð 2�fˆ�Ô8IÓ8Kˆ�r#   c           
   #   óˆ  K  — | j                   st        d«      ‚t        j                  d| j                  dd¬«      5 }t        j                  d| j                  dd¬«      5 }t        |«      D ]  }|j                  t        |«      «       Œ |j                  «        | j                  |j                  |j                  d¬«      }t        j                  «       }	 t        j                  t        j                  j                  | j                   «      d	   «       | j%                  ||«      }	t        j                  |«       |	d	k7  rt        d
dj'                  |«      |	fz  «      ‚t)        |j                  «      5 }
|
j+                  «       j                  d«      D ]  }t-        t/        ||¬«      g«      –— Œ 	 ddd«       ddd«       ddd«       t        j0                  j                  «       t        j0                  j                  «       y# t"        $ r Y �Œw xY w# 1 sw Y   ŒhxY w# 1 sw Y   ŒlxY w# 1 sw Y   ŒpxY w­w)a»  
        Use MaltParser to parse multiple POS tagged sentences. Takes multiple
        sentences where each sentence is a list of (word, tag) tuples.
        The sentences must have already been tokenized and tagged.

        :param sentences: Input sentences to parse
        :type sentence: list(list(tuple(str, str)))
        :return: iter(iter(``DependencyGraph``)) the dependency graph
            representation of each sentence
        z0Parser has not been trained. Call train() first.zmalt_input.conll.ÚwF©ÚprefixÚdirÚmodeÚdeletezmalt_output.conll.Úparse©rY   r   z0MaltParser parsing (%s) failed with exit code %dú z

©Útop_relation_labelN)rM   Ú	ExceptionrN   ÚNamedTemporaryFilerP   r	   ÚwriteÚstrÚcloseÚgenerate_malt_commandÚnamer1   ÚgetcwdÚchdirr2   r5   rL   ÚOSErrorÚ_executeÚjoinÚopenÚreadÚiterr   Úremove)rR   Ú	sentencesrD   r_   Ú
input_fileÚoutput_fileÚlineÚcmdÚ_current_pathÚretÚinfileÚtree_strs               r!   Úparse_tagged_sentszMaltParser.parse_tagged_sentsœ   s  è ø€ ð �}Š}ÜÐNÓOÐOä×(Ñ(Ø&¨D×,<Ñ,<À3Èuô
ð /	àÜ×,Ñ,Ø+Ø×$Ñ$ØØô	ð ,ð
 ä0°Ó;ò 0�DØ×$Ñ$¤S¨£YÕ/ð0à× Ñ Ô"ð ×0Ñ0Ø—O‘O [×%5Ñ%5¸Gð 1ó �ô !#§	¡	£�ðÜ—H‘HœRŸW™WŸ]™]¨4¯:©:Ó6°qÑ9Ô:ð —m‘m C¨Ó1�Ü—‘˜Ô'à˜!’8Ü#ð"Ø%(§X¡X¨c£]°CÐ$8ñ9óð ô ˜+×*Ñ*Ó+ð 
¨vØ$*§K¡K£M×$7Ñ$7¸Ó$?ò 	˜ä ä$3Ø(0ÐEWô%&ð!"óóñ	÷
÷E,÷/	ôb 	�	‰	�*—/‘/Ô"Ü
�	‰	�+×"Ñ"Õ#øô3 ò Úðú÷
ð 
ú÷E,ð ,ú÷/	ð /	üss   ‚;I½$H6Á!A7H*Ã?HÄA H*Å8>HÆ7H*Æ?H6ÇAIÈ	HÈH*ÈHÈH*ÈH'È#H*È*H3	È/H6È6H?È;Ic                 óB   ‡ — ˆ fd„|D «       }‰ j                  |||¬«      S )an  
        Use MaltParser to parse multiple sentences.
        Takes a list of sentences, where each sentence is a list of words.
        Each sentence will be automatically tagged with this
        MaltParser instance's tagger.

        :param sentences: Input sentences to parse
        :type sentence: list(list(str))
        :return: iter(DependencyGraph)
        c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­w)N)rQ   )Ú.0ÚsentencerR   s     €r!   ú	<genexpr>z)MaltParser.parse_sents.<locals>.<genexpr>é   s   øè ø€ ÒL°h˜DŸK™K¨×1ÑLùs   ƒr^   )ry   )rR   rp   rD   r_   Útagged_sentencess   `    r!   Úparse_sentszMaltParser.parse_sentsÞ   s1   ø€ ó MÀ)ÔLÐØ×&Ñ&Ø˜gÐ:Lð 'ó 
ð 	
r#   c                 óÈ  — dg}|| j                   z  }t        j                  j                  d«      rdnd}|d|j	                  | j
                  «      gz  }|dgz  }t        j                  j                  | j                  «      r2|dt        j                  j                  | j                  «      d   gz  }n|d| j                  gz  }|d	|gz  }|d
k(  r|d|gz  }|d|gz  }|S )a  
        This function generates the maltparser command use at the terminal.

        :param inputfilename: path to the input file
        :type inputfilename: str
        :param outputfilename: path to the output file
        :type outputfilename: str
        ÚjavaÚwinú;ú:z-cpzorg.maltparser.Maltz-céÿÿÿÿz-ir[   z-oz-m)rK   ÚsysÚplatformr-   rk   rJ   r1   r2   r3   rL   r5   )rR   ÚinputfilenameÚoutputfilenamerY   rt   Úclasspaths_separators         r!   re   z MaltParser.generate_malt_commandî   sî   € ð ˆhˆØˆt×(Ñ(Ñ(ˆä&)§l¡l×&=Ñ&=¸eÔ&D™sÈ#ÐØØØ ×%Ñ% d§n¡nÓ5ð
ñ 	
ˆð 	Ð%Ð&Ñ&ˆô �7‰7�>‰>˜$Ÿ*™*Ô%Ø�Dœ"Ÿ'™'Ÿ-™-¨¯
©
Ó3°BÑ7Ð8Ñ8‰Cà�D˜$Ÿ*™*Ð%Ñ%ˆCà��mÐ$Ñ$ˆØ�7Š?Ø�D˜.Ð)Ñ)ˆCØ��dˆ|ÑˆØˆ
r#   c                 óz   — |rd nt         j                  }t        j                  | ||¬«      }|j                  «       S )N)ÚstdoutÚstderr)Ú
subprocessÚPIPEÚPopenÚwait)rt   rD   ÚoutputÚps       r!   rj   zMaltParser._execute  s.   € á ‘¤j§o¡oˆÜ×Ñ˜S¨¸Ô?ˆØ�v‰v‹xˆr#   c                 óP  — t        j                  d| j                  dd¬«      5 }dj                  d„ |D «       «      }|j	                  t        |«      «       ddd«       | j                  j                  |¬«       t        j                  |j                  «       y# 1 sw Y   ŒFxY w)	zÍ
        Train MaltParser from a list of ``DependencyGraph`` objects

        :param depgraphs: list of ``DependencyGraph`` objects for training input data
        :type depgraphs: DependencyGraph
        úmalt_train.conll.rU   FrV   ú
c              3   ó>   K  — | ]  }|j                  d «      –— Œ y­w)é
   N)Úto_conll)r|   Údgs     r!   r~   z#MaltParser.train.<locals>.<genexpr>   s   è ø€ Ò!F°b "§+¡+¨b§/Ñ!Fùs   ‚N©rD   )
rN   ra   rP   rk   rb   rc   Útrain_from_filerf   r1   ro   )rR   Ú	depgraphsrD   rq   Ú	input_strs        r!   ÚtrainzMaltParser.train  sˆ   € ô ×(Ñ(Ø&¨D×,<Ñ,<À3Èuô
ð 	-àØŸ	™	Ñ!F¸IÔ!FÓFˆIØ×ÑœS ›^Ô,÷		-ð 	×Ñ˜ZŸ_™_°gÐÔ>ä
�	‰	�*—/‘/Õ"÷	-ð 	-ús   ¤3BÂB%c                 ó  — t        |t        «      r�t        j                  d| j                  dd¬«      5 }|j                  «       5 }|j                  «       }|j                  t        |«      «       ddd«       | j                  |j                  |¬«      cddd«       S | j                  |d¬«      }| j                  ||«      }|d	k7  rt        d
dj                  |«      |fz  «      ‚d| _        y# 1 sw Y   Œ€xY w# 1 sw Y   ŒfxY w)z—
        Train MaltParser from a file
        :param conll_file: str for the filename of the training input data
        :type conll_file: str
        r–   rU   FrV   Nrœ   Úlearnr\   r   z1MaltParser training (%s) failed with exit code %dr]   T)Ú
isinstancer   rN   ra   rP   rl   rm   rb   rc   r�   rf   re   rj   r`   rk   rM   )rR   Ú
conll_filerD   rq   Úconll_input_fileÚ	conll_strrt   rv   s           r!   r�   zMaltParser.train_from_file'  s  € ô �jÔ"4Ô5Ü×,Ñ,Ø*°×0@Ñ0@ÀsÐSXôð NàØ—_‘_Ó&ð 5Ð*:Ø 0× 5Ñ 5Ó 7�IØ×$Ñ$¤S¨£^Ô4÷5ð ×+Ñ+¨J¯O©OÀWÐ+ÓM÷Nñ Nð ×(Ñ(¨¸'Ð(ÓBˆØ�m‰m˜C Ó)ˆØ�!Š8ÜðØ ŸX™X c›]¨CÐ0ñ1óð ð ˆ�÷5ð 5ú÷Nð Nús#   ´C;Á+C/Á0$C;Ã/C8	Ã4C;Ã;D)r'   NNN)FÚnull)NN)F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rS   ry   r€   re   Ústaticmethodrj   r    r�   © r#   r!   rH   rH   ^   sL   „ ñð* ØØØ!ó(LóT@$óD
ó ð@ òó ðó
#ô&r#   rH   Ú__main__)Úinspectr1   r�   r‡   rN   Ú	nltk.datar   Únltk.internalsr   r   r   Únltk.parse.apir   Únltk.parse.dependencygraphr   Únltk.parse.utilr	   r"   r@   rF   rH   r¨   ÚdoctestÚtestmodr­   r#   r!   ú<module>r·      sp   ðó Û 	Û Û 
Û å (ß EÑ EÝ "Ý 6Ý 0ò#òLò*	Rôc�ô cðL ˆzÒð@óD à€G‡O�OÕðK r#   