Ë
    \›¾jî  ã            	       ó  — d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
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 ddlmZ ddlmZmZmZmZ dZ ej6                  d«      Z ej:                  d	«      Zg d
¢ZdddddddddœZ d„ Z!g d¢Z"d+d„Z# G d„ de$«      Z% G d„ de%«      Z& G d„ de$«      Z' G d„ de$«      Z( G d„ d ejR                  «      Z*d!„ Z+ G d"„ d#e,«      Z-d,d$„Z. G d%„ d&e-«      Z/d'„ Z0d,d(„Z1d)„ Z2g d*¢Z3y)-z1
Client for accessing Stanford CoreNLP in Python
é    N)Údatetime)ÚPath)Úurlparse)ÚDocumentÚparseFromDelimitedStringÚwriteToDelimitedStringÚto_textz)arunchaganty, kelvinguu, vzhong, wmonroe4Ústanzazcorenlp_server-(.*).props)ÚarÚarabicÚchineseÚzhÚenglishÚenÚfrenchÚfrÚdeÚgermanÚhuÚ	hungarianÚitÚitalianÚesÚspanishr   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   c                 ó.   — | j                  «       t        v S )z1 Check if a string references a CoreNLP language )ÚlowerÚCORENLP_LANGS)Ú	props_strs    ú^/home/spazio/kingdom_calls/work5/transenv/lib/python3.12/site-packages/stanza/server/client.pyÚis_corenlp_langr    2   s   € à�?‰?Ó¤Ð-Ð-ó    )ÚconllÚconlluÚjsonÚ
serializedÚtextÚxmlÚ	inlinexmlc                 óì   — |r*|j                  «       t        vrt        |› dt        › �«      ‚t        | «      t        k(  r6d| v r1| d   j                  «       t        vrt        | d   › dt        › �«      ‚yyy)z0 Do basic checks to validate CoreNLP properties z6 not a valid CoreNLP outputFormat value! Choose from: ÚoutputFormatN)r   ÚCORENLP_OUTPUT_VALSÚ
ValueErrorÚtypeÚdict©Ú
propertiesÚ
annotatorsÚoutput_formats      r   Úvalidate_corenlp_propsr3   ;   s�   € á˜×,Ñ,Ó.Ô6IÑIÜ˜M˜?Ð*`ÔatÐ`uÐvÓwÐwÜˆJÓœ4ÒØ˜ZÑ'¨J°~Ñ,F×,LÑ,LÓ,NÔViÑ,iÜ 
¨>Ñ :Ð;Ð;qÜ 3Ð4ð6ó 7ð 7ð -jÐ'ð  r!   c                   ó   — e Zd ZdZy)ÚAnnotationExceptionzQ Exception raised when there was an error communicating with the CoreNLP server. N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r!   r   r5   r5   E   s   „ Ù[Ør!   r5   c                   ó   — e Zd ZdZy)ÚTimeoutExceptionz5 Exception raised when the CoreNLP server timed out. Nr6   r;   r!   r   r=   r=   J   s   „ Ù?Ør!   r=   c                   ó   — e Zd ZdZy)ÚShouldRetryExceptionz; Exception raised if the service should retry the request. Nr6   r;   r!   r   r?   r?   O   s   „ ÙEØr!   r?   c                   ó   — e Zd ZdZy)ÚPermanentlyFailedExceptionz? Exception raised if the service should NOT retry the request. Nr6   r;   r!   r   rA   rA   T   s   „ ÙIØr!   rA   c                   ó   — e Zd ZdZdZdZy)ÚStartServerr   é   é   N)r7   r8   r9   Ú
DONT_STARTÚFORCE_STARTÚ	TRY_STARTr;   r!   r   rC   rC   X   s   „ Ø€JØ€KØ�Ir!   rC   c                 óÚ   — | rit         j                  j                  | «      rIt        j	                  t         j                  j                  | «      «      rt        j                  | «       y y y y ©N)ÚosÚpathÚisfileÚSERVER_PROPS_TMP_FILE_PATTERNÚmatchÚbasenameÚremove)Ú
props_files    r   Úclean_props_filerS   ^   sM   € áÜ�7‰7�>‰>˜*Ô%Ô*G×*MÑ*MÌbÏgÉg×N^ÑN^Ð_iÓNjÔ*kÜ�I‰I�jÕ!ð +lÐ%ð r!   c                   óJ   — e Zd ZdZdZ	 	 dd„Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zy)ÚRobustServicez: Service that resuscitates itself if it is not available. éx   Nc
                 ó8  — |xr t        j                  |«      | _        |xr t        j                  |«      | _        || _        || _        || _        d | _        d| _        || _	        || _
        || _        |	| _        t        j                  | j                  «       y )NF)ÚshlexÚsplitÚ	start_cmdÚstop_cmdÚendpointÚstdoutÚstderrÚserverÚ	is_activeÚbe_quietÚhostÚportÚignore_binding_errorÚatexitÚregisterÚatexit_kill)
ÚselfrZ   r[   r\   r]   r^   ra   rb   rc   rd   s
             r   Ú__init__zRobustService.__init__i   s~   € à"Ò=¤u§{¡{°9Ó'=ˆŒØ Ò:¤U§[¡[°Ó%:ˆŒØ ˆŒØˆŒØˆŒàˆŒØˆŒØ ˆŒØˆŒ	ØˆŒ	Ø$8ˆÔ!Ü�‰˜×(Ñ(Õ)r!   c                 ó"  — 	 | j                   s'| j                  �| j                  j                  «       �yt        j                  | j
                  dz   «      j                  S # t        j                  j                  $ r}t        |«      ‚d }~ww xY w)NFz/ping)
rd   r_   ÚpollÚrequestsÚgetr\   ÚokÚ
exceptionsÚConnectionErrorr?   )rh   Úes     r   Úis_alivezRobustService.is_alivey   ss   € ð	*Ø×,Ò,°·±Ð1HÈTÏ[É[×M]ÑM]ÓM_ÐMkØÜ—<‘< §¡°Ñ 7Ó8×;Ñ;Ð;øÜ×"Ñ"×2Ñ2ò 	*Ü& qÓ)Ð)ûð	*ús   ‚2A! µ+A! Á!BÁ>B	Â	Bc                 ó  — | j                   �rK| j                  rƒ| j                  rwt        j                  t        j
                  t
        j                  t
        j                  «      «      5 }	 |j                  | j                  | j                  f«       	 d d d «       | j                  r>t!        t"        d«      rt"        j$                  }nt'        t(        j*                  d«      }|}n| j,                  }| j.                  }t        j                  ddj1                  | j                   «      › �«       	 t#        j2                  | j                   ||¬«      | _        y y # t
        j                  $ rm}| j                  rCt        j                  d| j                  › d| j                  › �«       d | _        Y d }~d d d «       y t        d| j                  z  «      |‚d }~ww xY w# 1 sw Y   �ŒJxY w# t4        $ r}t5        d	«      |‚d }~ww xY w)
Nz)Connecting to existing CoreNLP server at ú:zbError: unable to start the CoreNLP server on port %d (possibly something is already running there)ÚDEVNULLÚwzStarting server with command: ú )r^   r]   z„When trying to run CoreNLP, a FileNotFoundError occurred, which frequently means Java was not installed or was not in the classpath.)rZ   rb   rc   Ú
contextlibÚclosingÚsocketÚAF_INETÚSOCK_STREAMÚbindÚerrorrd   ÚloggerÚinfor_   rA   ra   ÚhasattrÚ
subprocessru   ÚopenrK   Údevnullr]   r^   ÚjoinÚPopenÚFileNotFoundError)rh   Úsockrq   r^   r]   s        r   ÚstartzRobustService.start�   sÂ  € Ø�>‹>Ø�yŠy˜TŸYšYÜ×'Ñ'¬¯©´f·n±nÄf×FXÑFXÓ(YÓZð 
AÐ^bð	AØŸ	™	 4§9¡9¨d¯i©iÐ"8Õ9÷
Að �}Š}äœ: yÔ1Ü'×/Ñ/‘Fä!¤"§*¡*¨cÓ2�FØ‘àŸ™�ØŸ™�Ü�K‰KÐ8¸¿¹À$Ç.Á.Ó9QÐ8RÐSÔTðwÜ(×.Ñ.¨t¯~©~Ø6<Ø6<ô>�•ð3 øô
 "Ÿ<™<ò AØ×4Ò4Ü"ŸK™KÐ*SÐTX×T]ÑT]ÐS^Ð^_Ð`d×`iÑ`iÐ_jÐ(kÔlØ*.˜DœKÛ"÷
Að 
Aô #=ð >mØos×oxÑoxñ>yó #zð @AðAûðAú÷
Añ 
Aûô4 %ò wÜ'ð  )oó  pð  vwð  wûðwúsO   Á+GÁ-'EÄ1'G* ÅGÅ-AGÆ/GÆ<GÇGÇGÇG'Ç*	HÇ3G?Ç?Hc                 óˆ   — | j                   r6| j                   j                  «       €| j                   j                  «        y y y rJ   )r_   rk   Ú	terminate©rh   s    r   rg   zRobustService.atexit_kill¡   s4   € ð �;Š;˜4Ÿ;™;×+Ñ+Ó-Ð5Ø�K‰K×!Ñ!Õ#ð 6ˆ;r!   c                 óÐ  — | j                   r=| j                   j                  «        	 | j                   j                  d«       d | _         | j                  r!t        j                  | j                  d¬«       d| _        y # t        j                  $ rS | j                   j                  «        	 | j                   j                  d«       n# t        j                  $ r Y nw xY wY Œ¡w xY w)Né   T)ÚcheckF)	r_   r‹   Úwaitr‚   ÚTimeoutExpiredÚkillr[   Úrunr`   rŒ   s    r   ÚstopzRobustService.stop¨   s¯   € Ø�;Š;Ø�K‰K×!Ñ!Ô#ð	Ø—‘× Ñ  Ô#ð ˆDŒKØ�=Š=Ü�N‰N˜4Ÿ=™=°Õ5Øˆ�øô ×,Ñ,ò à—‘× Ñ Ô"ðØ—K‘K×$Ñ$ QÕ'øÜ!×0Ñ0ò áðüðús5   ¨A? Á?-C%Â-C	ÃC%Ã	CÃC%ÃCÃC%Ã$C%c                 ó&   — | j                  «        | S rJ   )r‰   rŒ   s    r   Ú	__enter__zRobustService.__enter__º   s   € Ø�
‰
ŒØˆr!   c                 ó$   — | j                  «        y rJ   )r”   )rh   Ú_Ú__Ú___s       r   Ú__exit__zRobustService.__exit__¾   s   € Ø�	‰	�r!   c                 óÀ  — | j                   r#	 | j                  «       ry | j                  «        	 | j                  €| j                  «        t        j                  «       }	 	 | j                  «       r		 d| _         y 	 t        j                  «       |z
  | j                  k  rt        j                  d«       nt        d«      ‚Œa# t        $ r Y Œ�w xY w# t        $ r Y Œ`w xY w)NTrD   z,Timed out waiting for service to come alive.)
r`   rr   r”   r?   r_   r‰   ÚtimeÚCHECK_ALIVE_TIMEOUTÚsleeprA   )rh   Ú
start_times     r   Úensure_alivezRobustService.ensure_aliveÁ   sÅ   € à�>Š>ðØ—=‘=”?Øà—I‘I•Kð
 �;‰;ÐØ�J‰JŒLô —Y‘Y“[ˆ
ØðØ—=‘=”?Øð ˆ�ð #ô
 �y‰y‹{˜ZÑ'¨$×*BÑ*BÒBÜ—
‘
˜1•ä0Ð1_Ó`Ð`ð øô (ò Ùðûô (ò Ùðús(   ŽC ŸC Á"C Ã	CÃCÃ	CÃC)NNFNNF)r7   r8   r9   r:   rž   ri   rr   r‰   rg   r”   r–   r›   r¡   r;   r!   r   rU   rU   e   s;   „ ÙDØÐà=AØY^ó*ò *òwò@$òò$òór!   rU   c           	      óî  — | dk(  s| €0t        j                  dd«      dk(  rt        j                  d«      } | S | €»t        j                  dt         j                  j                  t	        t        j                  «       «      d«      «      } t         j                  j                  | «      s-t        dj                  t        j                  d«      «      «      ‚t         j                  j                  | d«      } | S )a  
    Returns the classpath to use for corenlp.

    Prefers to use the given classpath parameter, if available.  If
    not, uses the CORENLP_HOME environment variable.  Resolves $CLASSPATH
    (the exact string) in either the classpath parameter or $CORENLP_HOME.
    z
$CLASSPATHNÚCORENLP_HOMEÚ	CLASSPATHÚstanza_corenlpzÓPlease install CoreNLP by running `stanza.install_corenlp()`. If you have installed it, please define $CORENLP_HOME to be location of your CoreNLP distribution or pass in a classpath parameter.  $CORENLP_HOME={}Ú*)
rK   ÚgetenvrL   r…   Ústrr   ÚhomeÚexistsr‡   Úformat)Ú	classpaths    r   Úresolve_classpathr­   â   sÁ   € ð �LÒ  YÐ%6¼2¿9¹9À^ÐUYÓ;ZÐ^jÒ;jÜ—I‘I˜kÓ*ˆ	ð Ðð 
Ð	Ü—I‘I˜n¬b¯g©g¯l©l¼3¼t¿y¹y»{Ó;KÐM]Ó.^Ó_ˆ	ä�w‰w�~‰~˜iÔ(Ü#ð %7ç7=±v¼b¿i¹iÈÓ>WÓ7XóZð Zô —G‘G—L‘L ¨CÓ0ˆ	ØÐr!   c                   óÀ   ‡ — e Zd ZdZdZdZdZdZdZdZ	e
j                  eeedd	dddded	e	d
dfˆ fd„	Zd„ Zd„ Zdd„Zdd„Zdd„Zdd„Zdd„Zd„ Zdd„Zdd„Zdd„Zˆ xZS )ÚCoreNLPClientz* A client to the Stanford CoreNLP server. zhttp://localhost:9000i`ê  rŽ   r%   Ú5Gi † NFTc                 ó  •— || _         d | _        d | _        d | _        d | _        d | _        t        |||¬«       || _        || _        || _	        || _
        | j                  «        t        |t        «      rVd| j                  j                  › d�dz   }t         j#                  |«       |du rt$        j&                  nt$        j(                  }|t$        j&                  u s|t$        j*                  u �rØt-        j.                  «       | _        | j1                  «        t3        |«      j4                  j7                  d«      \  }}t9        |«      }|dk(  sJ d«       ‚t;        |«      }d	|› d
|› d|› d|› d|› d|› d|› d�}|| _        || _        || _        | j                  �|d| j                  › �z  }| j                  r|dz  }| j                  �7t=        |«      t>        k(  r| j                  ndjA                  |«      }|d|› �z  }|r\t=        |«      t        k(  r|dz  }nDt=        |«      tB        k(  r|ddjA                  |«      › �z  }nt=        |«      t>        k(  r|d|› �z  }|d| j                  › �z  }dD ]  }|jE                  |«      €Œ|d|› �z  }Œ dD ].  }|jE                  |«      €Œ|d|› d|jE                  |«      › �z  }Œ0 d }nd x}}d x}}tF        tH        | �—  ||||	|
||||t$        j*                  k(  ¬«	       || _&        y )Nr/   z<Setting 'start_server' to a boolean value when constructing z is deprecated and will stopzv to function in a future version of stanza. Please consider switching to using a value from stanza.server.StartServer.Trt   Ú	localhostz0If starting a server, endpoint must be localhostz	java -Xmxz -cp 'z9'  edu.stanford.nlp.pipeline.StanfordCoreNLPServer -port z
 -timeout z
 -threads z -maxCharLength z -quiet rw   z -serverProperties z -preTokenizedú,z -annotators z	 -preloadz
 -preload z -outputFormat )ÚsslÚstrictz -)Ústatus_portÚ
uriContextÚkeyÚusernameÚpasswordÚ	blockListÚ	server_id)rb   rc   rd   )'Ústart_serverÚserver_props_pathÚserver_start_timeÚserver_hostÚserver_portÚserver_classpathr3   r0   r1   Úpretokenizedr2   Ú_setup_client_defaultsÚ
isinstanceÚboolÚ	__class__r7   r   ÚwarningrC   rG   rF   rH   r   ÚnowÚ_setup_server_defaultsr   ÚnetlocrY   Úintr­   r-   r¨   r…   Úlistrm   Úsuperr¯   ri   Útimeout)rh   r½   r\   rÏ   Úthreadsr1   rÃ   r2   r0   r]   r^   Úmemoryra   Úmax_char_lengthÚpreloadr¬   ÚkwargsÚwarning_msgrb   rc   rZ   Úannotators_strÚkwr[   rÇ   s                           €r   ri   zCoreNLPClient.__init__  st  ø€ ð$ )ˆÔØ!%ˆÔØ!%ˆÔØˆÔØˆÔØ $ˆÔä¨*ÀÐ[hÕià$ˆŒØ$ˆŒØ(ˆÔØ*ˆÔØ×#Ñ#Ô%ä�l¤DÔ)ØXÐY]×YgÑYg×YpÑYpÐXqð  rNð  Oð IñIˆKä�N‰N˜;Ô'Ø6BÀdÑ6Jœ;×2Ò2ÔP[×PfÑPfˆLð œ;×2Ñ2Ñ2°lÄk×F[ÑF[Ò6[ä%-§\¡\£^ˆDÔ"à×'Ñ'Ô)Ü! (Ó+×2Ñ2×8Ñ8¸Ó=‰JˆD�$Ü�t“9ˆDØ˜;Ò&ÐZÐ(ZÓZÐ&Ü)¨)Ó4ˆIØ# F 8¨6°)°ð =!Ø!%  j°°	¸ÀGÀ9ÐL\Ð]lÐ\mð n"Ø"* ¨1ð.ˆIð %.ˆDÔ!Ø#ˆDÔØ#ˆDÔð ×%Ñ%Ð1ØÐ2°4×3IÑ3IÐ2JÐKÑK�	ð × Ò Ø˜~Ñ.�	ð �‰Ð*Ü48¸Ó4DÌÒ4K §¢ÐQT×QYÑQYÐZdÓQe�Ø˜}¨^Ð,<Ð=Ñ=�	ñ Ü˜“=¤DÒ(à Ñ,‘IÜ˜'“]¤dÒ*à :¨c¯h©h°wÓ.?Ð-@Ð!AÑA‘IÜ˜'“]¤cÒ)à :¨g¨YÐ!7Ñ7�Ið ˜?¨4×+=Ñ+=Ð*>Ð?Ñ?ˆIð (ò +�Ø—:‘:˜b“>Ñ-Ø 2 b T Ñ*‘Ið+ð mò <�Ø—:‘:˜b“>Ñ-Ø 2 b T¨¨6¯:©:°b«>Ð*:Ð!;Ñ;‘Ið<ð ‰Hà#'Ð'ˆI˜ØÐˆD�4äŒm˜TÑ+¨I°xÀØ,2°F¸HÈ4ÐVZÐr~ô  CN÷  CXñ  CXñ  sXð 	,ô 	Zð ˆ�r!   c                 ón  — | j                   �Ht        | j                   «      t        k(  r| j                   ndj                  | j                   «      | _         | j                  €Ut        | j
                  «      t        k(  r#d| j
                  v r| j
                  d   | _        yt        j                  | _        yy)zÛ
        Do some processing of annotators and output_format specified for the client.
        If interacting with an externally started server, these will be defaults for annotate() calls.
        :return: None
        Nr³   r*   )	r1   r-   r¨   r…   r2   r0   r.   r¯   ÚDEFAULT_OUTPUT_FORMATrŒ   s    r   rÄ   z$CoreNLPClient._setup_client_defaultsq  sŒ   € ð �?‰?Ð&Ü15°d·o±oÓ1FÌ#Ò1M˜dŸošoÐSV×S[ÑS[Ð\`×\kÑ\kÓSlˆDŒOð ×ÑÐ%Ü�D—O‘OÓ$¬Ò,°À4Ç?Á?Ñ1RØ%)§_¡_°^Ñ%D�Õ"ä%2×%HÑ%H�Õ"ð	 &r!   c                 óF  — | j                   �4t        | j                   t        «      sBt        | j                   t        «      s(| j                   �t        j                  d«       i | _         t        | j                   t        «      rÛt        | j                   «      ri| j                   j                  «       t        v rt        | j                      | _         t        j                  d| j                   › d| j                   › d�«       nKt        j                  j                  | j                   «      s"t        j                  | j                   › d�«       | j                   | _        yt        | j                   t        «      rªt        | j                   «      }| j                  �| j                  |d<   | j                  �)t        | j                  t        «      r| j                  |d<   t!        |«      }t        j                  d	|› �«       t#        j$                  t&        |«       || _        yy)
a  
        Set up the default properties for the server.

        The properties argument can take on one of 3 value types

        1. File path on system or in CLASSPATH (e.g. /path/to/server.props or StanfordCoreNLP-french.properties
        2. Name of a Stanford CoreNLP supported language (e.g. french or fr)
        3. Python dictionary (properties written to tmp file for Java server, erased at end)

        In addition, an annotators list and output_format can be specified directly with arguments. These
        will overwrite any settings in the specified properties.

        If no properties are specified, the standard Stanford CoreNLP English server will be launched. The outputFormat
        will be set to 'serialized' and use the ProtobufAnnotationSerializer.
        NzLproperties passed invalid value (not a str or dict), setting properties = {}z&Using CoreNLP default properties for: z.  Make sure to have z^ models jar (available for download here: https://stanfordnlp.github.io/CoreNLP/) in CLASSPATHzN does not correspond to a file path. Make sure this file is in your CLASSPATH.r1   r*   z Writing properties to tmp file: )r0   rÅ   r¨   r.   r   rÈ   r    r   ÚLANGUAGE_SHORTHANDS_TO_FULLr€   rK   rL   rM   r¾   r1   r2   Úwrite_corenlp_propsre   rf   rS   )rh   Úserver_start_propertiesÚtmp_paths      r   rÊ   z$CoreNLPClient._setup_server_defaults‚  sž  € ð$ �?‰?Ð"¬:°d·o±oÄsÔ+KÔT^Ð_c×_nÑ_nÔptÔTuØ�‰Ð*Ü—‘ÐmÔnØ ˆDŒOä�d—o‘o¤sÔ+ä˜tŸ™Ô/Ø—?‘?×(Ñ(Ó*Ô.IÑIÜ&AÀ$Ç/Á/Ñ&R�D”OÜ—‘Ø<¸T¿_¹_Ð<MÐMbØ—‘Ð'ð (KðLõMô
 —w‘w—~‘~ d§o¡oÔ6Ü—N‘N d§o¡oÐ%6ð 75ð $6ô 7à%)§_¡_ˆDÕ"Ü˜Ÿ™¬Ô.ä&*¨4¯?©?Ó&;Ð#Ø�‰Ð*Ø8<¿¹Ð'¨Ñ5Ø×!Ñ!Ð-´*¸T×=OÑ=OÔQTÔ2UØ:>×:LÑ:LÐ'¨Ñ7ô +Ð+BÓCˆHÜ�K‰KÐ:¸8¸*ÐEÔFÜ�O‰OÔ,¨hÔ7Ø%-ˆDÕ"ð /r!   c                 ó¾  — | j                   t        j                  ur| j                  «        	 |j	                  dd«      }|dk(  rd}n|dk(  rd}nt        d|z   «      ‚d|v rOd|v rKt        j                  j                  |d   |d   «      |d	<   |j                  d«       |j                  d«       t        j                  | j                  ft        |«      t        |«      j                  «       d
œ|d|i| j                  dz  dz  dœ|¤Ž}|j                  «        |S # t        j                   j"                  $ r}t%        d«      ‚d}~wt        j                   j&                  $ rw}|j(                  �6|j(                  j*                  � t-        |j(                  j*                  «      |‚|j.                  rt-        |j.                  d   «      |‚t-        «       |‚d}~ww xY w)zà
        Send a request to the CoreNLP server.

        :param (str | bytes) buf: data to be sent with the request
        :param (dict) properties: properties that the server expects
        :return: request result
        ÚinputFormatr&   útext/plain; charset=utf-8r%   úapplication/x-protobufúUnrecognized inputFormat r¹   rº   Úauth)r0   ÚresetDefaultúcontent-typerE   éè  ©ÚparamsÚdataÚheadersrÏ   z]Timeout requesting to CoreNLPServer. Maybe server is unavailable or your document is too longNr   )r½   rC   rF   r¡   rm   r,   rl   rä   ÚHTTPBasicAuthÚpopÚpostr\   r¨   r   rÏ   Úraise_for_statusro   ÚTimeoutr=   ÚRequestExceptionÚresponser&   r5   Úargs)	rh   Úbufr0   Úreset_defaultrÔ   Úinput_formatÚctypeÚrrq   s	            r   Ú_requestzCoreNLPClient._requestµ  s¼  € ð ×Ñ¤K×$:Ñ$:Ñ:Ø×ÑÔð	/Ø%Ÿ>™>¨-¸Ó@ˆLØ˜vÒ%Ø3‘Ø Ò-Ø0‘ä Ð!<¸|Ñ!KÓLÐLà˜VÑ#¨
°fÑ(<Ü!)§¡×!<Ñ!<¸VÀJÑ=OÐQWÐXbÑQcÓ!d��v‘Ø—
‘
˜:Ô&Ø—
‘
˜:Ô&Ü—‘˜dŸm™mð GÜ47¸
³OÔUXÐYfÓUg×UmÑUmÓUoÑ%pØ#&°ÀÐ0GØ'+§|¡|°A¡~°tÑ&;ñGð @FñGˆAð ×ÑÔ ØˆHøÜ×"Ñ"×*Ñ*ò 	DÜ"ð  $Có  Dð  DûÜ×"Ñ"×3Ñ3ò 	/Ø�z‰zÐ%¨!¯*©*¯/©/Ð*EÜ)¨!¯*©*¯/©/Ó:ÀÐAØ—’Ü)¨!¯&©&°©)Ó4¸!Ð;Ü%Ó'¨QÐ.ûð	/ús%   ®C.D ÄGÄ:EÅ GÅ%A2GÇGc                 ó$  — t        |||¬«       i }| j                  �| j                  |d<   | j                  �| j                  |d<   t        |«      t        k(  r0t        |«      rd|j                  «       i}|€d}nt        d|› �«      ‚t        |«      t        k(  r|j                  |«       |�Lt        |«      t        k(  st        |«      t        k(  r(t        |«      t        k(  r|ndj                  |«      |d<   |�t        |«      t        k(  r||d<   |€d} | j                  |j                  d	«      ||fi |¤Ž}|d   d
k(  r|j                  «       S |d   dk(  r"t        «       }	t!        |	|j"                  «       |	S |d   dv r|j$                  S |S )aƒ  
        Send a request to the CoreNLP server.

        :param (str | unicode) text: raw text for the CoreNLPServer to parse
        :param (list | string) annotators: list of annotators to use
        :param (str) output_format: output type from server: serialized, json, text, conll, conllu, or xml
        :param (dict) properties: additional request properties (written on top of defaults)
        :param (bool) reset_default: don't use server defaults

        Precedence for settings:

        1. annotators and output_format args
        2. Values from properties dict
        3. Client defaults self.annotators and self.output_format (set during client construction)
        4. Server defaults

        Additional request parameters (apart from CoreNLP pipeline properties) such as 'username' and 'password'
        can be specified with the kwargs.

        :return: request result
        r/   r1   r*   ÚpipelineLanguageTz Unrecognized properties keyword r³   Fúutf-8r$   r%   )r&   r#   r"   r'   )r3   r1   r2   r-   r¨   r    r   r,   r.   ÚupdaterÍ   r…   rù   Úencoder$   r   r   Úcontentr&   )
rh   r&   r1   r2   r0   rõ   rÔ   Úrequest_propertiesrø   Údocs
             r   ÚannotatezCoreNLPClient.annotateÜ  s¥  € ô0 	¨*ÀÐ[hÕiàÐð �?‰?Ð&Ø/3¯©Ð˜|Ñ,Ø×ÑÐ)Ø15×1CÑ1CÐ˜~Ñ.ô �
ÓœsÒ"Ü˜zÔ*Ø0°*×2BÑ2BÓ2DÐE�
Ø Ð(Ø$(‘Mä Ð#CÀJÀ<Ð!PÓQÐQä�
ÓœtÒ#Ø×%Ñ% jÔ1ð Ð!¤t¨JÓ'7¼3Ò'>Ä$ÀzÓBRÔVZÒBZÜ=AÀ*Ó=MÔQTÒ=T©zÐZ]×ZbÑZbÐcmÓZnÐ˜|Ñ,ð Ð$¬¨mÓ)<ÄÒ)CØ1>Ð˜~Ñ.ð Ð Ø!ˆMØˆD�M‰M˜$Ÿ+™+ gÓ.Ð0BÀMÑ\ÐU[Ñ\ˆØ˜nÑ-°Ò7Ø—6‘6“8ˆOØ Ñ/°<Ò?Ü“*ˆCÜ$ S¨!¯)©)Ô4ØˆJØ Ñ/Ð3UÑUØ—6‘6ˆMàˆHr!   c                 óz  — |€i }|j                  ddddœ«       |r(t        |«      t        k(  r|ndj                  |«      |d<   t	        j
                  «       5 }t        ||«       |j                  «       }d d d «       | j                  |«      }t        «       }t        ||j                  «       |S # 1 sw Y   Œ=xY w)Nr%   ú6edu.stanford.nlp.pipeline.ProtobufAnnotationSerializer)rà   r*   Ú
serializerr³   r1   )rý   r-   r¨   r…   ÚioÚBytesIOr   Úgetvaluerù   r   r   rÿ   )rh   r  r1   r0   ÚstreamÚmsgrø   s          r   rý   zCoreNLPClient.update$  sµ   € ØÐØˆJØ×ÑØ+Ø ,ØVñô ñ
 Ü59¸*Ó5EÌÒ5L¡zÐRU×RZÑRZÐ[eÓRfˆJ�|Ñ$Ü�Z‰Z‹\ð 	$˜VÜ" 3¨Ô/Ø—/‘/Ó#ˆC÷	$ð �M‰M˜#˜zÓ*ˆÜ‹jˆÜ   a§i¡iÔ0Øˆ
÷	$ð 	$ús   ÁB1Â1B:c                 óL   — | j                  d|||||«      }|rt        |«      }|S )Nz/tokensregex©Ú_CoreNLPClient__regexÚregex_matches_to_indexed_words©rh   r&   ÚpatternÚfilterÚto_wordsr1   r0   Úmatchess           r   ÚtokensregexzCoreNLPClient.tokensregex7  s-   € à—,‘,˜~¨t°W¸fÀjÐR\Ó]ˆÙÜ4°WÓ=ˆGØˆr!   c                 óL   — | j                  d|||||«      }|rt        |«      }|S )Nz/semgrexr  r  s           r   ÚsemgrexzCoreNLPClient.semgrex>  s,   € Ø—,‘,˜z¨4°¸&À*ÈjÓYˆÙÜ4°WÓ=ˆGØˆr!   c                 ó¸   — |j                   r|j                   |_        |j                  D ].  }|j                  j	                  «       }| j                  ||«       Œ0 y rJ   )ÚlabelÚvalueÚchildrenÚchildÚaddÚfill_tree_proto)rh   ÚtreeÚ
proto_treer  Úproto_childs        r   r  zCoreNLPClient.fill_tree_protoD  sL   € Ø�:Š:Ø#Ÿz™zˆJÔØ—]‘]ò 	5ˆEØ$×*Ñ*×.Ñ.Ó0ˆKØ× Ñ  ¨Õ4ñ	5r!   c                 ó„  — |€W| j                   �Kt        | j                   t        «      sJ ‚| j                   j                  d«      }d|vr| j                   dz   }nd}|€t	        d«      ‚|��4|€i }d|d<   d|vrd	|d<   t        «       }g }	t        |«      D ]¹  \  }
}|j                  j                  «       }|
|_	        t        |	«      |_        |j                  «       }|	j                  |«       t        |	«      |_        | j                  ||j                   «       |D ]1  }|j"                  j                  «       }||_        ||_        d
|_        Œ3 Œ» d
j+                  |	«      |_        t/        j0                  «       5 }t3        ||«       |j5                  «       }d d d «       | j7                  d|||||«      S # 1 sw Y   ŒxY w)Nr³   Úparsez,parseztokenize,ssplit,pos,parsez(Cannot have None as a pattern for tregexr%   rà   r  r  rw   z/tregex)r1   rÅ   r¨   rY   r,   r   Ú	enumerateÚsentencer  ÚsentenceIndexÚlenÚtokenOffsetBeginÚleaf_labelsÚextendÚtokenOffsetEndr  Ú	parseTreeÚtokenr  ÚwordÚafterr…   r&   r  r  r   r  r  )rh   r&   r  r  r1   r0   ÚtreesÚpiecesr  Ú	full_textÚtree_idxr  r$  Úleavesr-  r,  r	  s                    r   ÚtregexzCoreNLPClient.tregexK  s¹  € ð Ð $§/¡/Ð"=Ü˜dŸo™o¬sÔ3Ð3Ð3Ø—_‘_×*Ñ*¨3Ó/ˆFØ˜fÑ$Ø!Ÿ_™_¨xÑ7‘
à4ˆJØˆ?ÜÐGÓHÐHð ÑØÐ!Ø�
Ø(4ˆJ�}Ñ%Ø :Ñ-Ø+c�
˜<Ñ(Ü“*ˆCØˆIÜ"+¨EÓ"2ò &‘�˜$ØŸ<™<×+Ñ+Ó-�Ø)1�Ô&Ü,/°	«N�Ô)Ø×)Ñ)Ó+�Ø× Ñ  Ô(Ü*-¨i«.�Ô'Ø×$Ñ$ T¨8×+=Ñ+=Ô>Ø"ò &�DØ$ŸN™N×.Ñ.Ó0�Eà"&�E”KØ!%�E”Jð #&�E•Kñ&ð&ð  —x‘x 	Ó*ˆCŒHÜ—‘“ð ) Ü& s¨FÔ3Ø—‘Ó(�÷)ð �|‰|˜I t¨W°f¸jÈ*ÓUÐU÷	)ð )ús   Å;F6Æ6F?c                 ó°  — | j                   t        j                  ur| j                  «        |€i }|j	                  dddœ«       |r&t        |t        «      rdj                  |«      n||d<   d|d<   d	|d
<   	 |j                  dd«      }|dk(  rd}n|dk(  rd}nt        d|z   «      ‚t        j                  | j                  |z   ||t        |«      dœt        |t        «      r|j                  d«      n|d|i| j                  dz  dz  ¬«      }	|	j!                  «        |	j"                  €d|	_        t%        j&                  |	j(                  «      S # t        j*                  $ rJ}
	j(                  j-                  d«      rt/        |	j(                  «      ‚t1        |	j(                  «      ‚d}
~
wt$        j2                  $ r t1        	j(                  «      ‚w xY w)aõ  
        Send a regex-related request to the CoreNLP server.

        :param (str | unicode) path: the path for the regex endpoint
        :param text: raw text for the CoreNLPServer to apply the regex
        :param (str | unicode) pattern: regex pattern
        :param (bool) filter: option to filter sentences that contain matches, if false returns matches
        :param properties: option to filter sentences that contain matches, if false returns matches
        :return: request result
        Nr&   r  )rà   r  r³   r1   r$   r*   Útrueztokenize.codepointrà   rá   r%   râ   rã   )r  r  r0   rü   ræ   rE   rç   rè   rð   )r½   rC   rF   r¡   rý   rÅ   rÍ   r…   rm   r,   rl   rî   r\   r¨   rþ   rÏ   rï   Úencodingr$   Úloadsr&   Ú	HTTPErrorÚ
startswithr=   r5   ÚJSONDecodeError)rh   rL   r&   r  r  r1   r0   rö   r÷   rø   rq   s              r   Ú__regexzCoreNLPClient.__regexz  s¸  € ð ×Ñ¤K×$:Ñ$:Ñ:Ø×ÑÔØÐØˆJØ×ÑØ%ØVñô ñ Ü?IÈ*ÔVZÔ?[ s§x¡x°
Ô';ÐakˆJ�|Ñ$ð &,ˆ
�>Ñ"ð ,2ˆ
Ð'Ñ(ð	.à%Ÿ>™>¨-¸Ó@ˆLØ˜vÒ%Ø3‘Ø Ò-Ø0‘ä Ð!<¸|Ñ!KÓLÐLä—‘Ø—‘ Ñ$Ø&Ø$Ü"% j£/ñ.ô
 .8¸¼cÔ-B�T—[‘[ Ô)ÈØ'¨Ð/ØŸ™ a™¨Ñ-ô	ˆAð ×ÑÔ Ø�z‰zÐ!Ø$�”
Ü—:‘:˜aŸf™fÓ%Ð%øÜ×!Ñ!ò 	2Ø�v‰v× Ñ  Ô+Ü& q§v¡vÓ.Ð.ä)¨!¯&©&Ó1Ð1ûÜ×#Ñ#ò 	.Ü% a§f¡fÓ-Ð-ð	.ús   Á8CE ÅGÅ$AF)Æ),Gc                 óØ  — | j                   t        j                  ur| j                  «        |€i }d|d<   d}d|d<   	 t	        j
                  | j                  dz   dt        |«      it        |t        «      r|j                  d	«      n|d
|i| j                  dz  dz  ¬«      }|j                  «        |j                  €d	|_        t        j                  |j                  «      S # t        j                   $ rJ}j                  j#                  d«      rt%        |j                  «      ‚t'        |j                  «      ‚d}~wt        j(                  $ r t'        j                  «      ‚w xY w)z™
        Send a request to the server which processes the text using SceneGraph

        This will require a new CoreNLP release, 4.5.5 or later
        Nr&   rà   rá   r$   r*   z/scenegraphr0   rü   ræ   rE   rç   rè   rð   )r½   rC   rF   r¡   rl   rî   r\   r¨   rÅ   rþ   rÏ   rï   r7  r$   r8  r&   r9  r:  r=   r5   r;  )rh   r&   r0   r÷   rø   rq   s         r   Ú
scenegraphzCoreNLPClient.scenegraph¸  s;  € ð ×Ñ¤K×$:Ñ$:Ñ:Ø×ÑÔàÐØˆJà$*ˆ
�=Ñ!Ø+ˆà%+ˆ
�>Ñ"ð	.Ü—‘Ø—‘ Ñ-à ¤# j£/ðô .8¸¼cÔ-B�T—[‘[ Ô)ÈØ'¨Ð/ØŸ™ a™¨Ñ-ôˆAð ×ÑÔ Ø�z‰zÐ!Ø$�”
Ü—:‘:˜aŸf™fÓ%Ð%øÜ×!Ñ!ò 	2Ø�v‰v× Ñ  Ô+Ü& q§v¡vÓ.Ð.ä)¨!¯&©&Ó1Ð1ûÜ×#Ñ#ò 	.Ü% a§f¡fÓ-Ð-ð	.ús   ¾B&C% Ã%E)Ã8AD=Ä=,E))F)NNNN)NN)FFNN)NNFNNNrJ   )r7   r8   r9   r:   ÚDEFAULT_ENDPOINTÚDEFAULT_TIMEOUTÚDEFAULT_THREADSrÙ   ÚDEFAULT_MEMORYÚDEFAULT_MAX_CHAR_LENGTHrC   rG   ri   rÄ   rÊ   rù   r  rý   r  r  r  r4  r  r>  Ú__classcell__)rÇ   s   @r   r¯   r¯   ÷   s    ø„ Ù4à.ÐØ€OØ€OØ(ÐØ€NØ$Ðà$/×$;Ñ$;Ø*Ø(Ø(Ø Ø#Ø#Ø ØØØ&ØØ!8ØØõnò`Iò"1.óf%/óNFóPó&óò5ó-Vó^;.÷|&.r!   r¯   c                 ót  — i }t        | «      5 }|j                  «       j                  d«      D �cg c]%  }|j                  «       r|j	                  d«      s|‘Œ' }}|D ]<  }|j                  d«      d   }t        |dz   «      }||d }|||j                  «       <   Œ> 	 ddd«       |S c c}w # 1 sw Y   |S xY w)z5 Read a Stanford CoreNLP properties file into a dict ú
ú#ú=r   N)rƒ   ÚreadrY   Ústripr:  r&  )Ú
props_pathÚ
props_dictrR   Ú
entry_lineÚentry_linesÚkÚk_lenÚvs           r   Úread_corenlp_propsrR  á  sÎ   € à€JÜ	ˆjÓ	ð &˜ZØ4>·O±OÓ4E×4KÑ4KÈDÓ4Qö Q jØ$×*Ñ*Ô,°Z×5JÑ5JÈ3Ô5Oò "ð Qˆð Qà%ò 	&ˆJØ× Ñ  Ó% aÑ(ˆAÜ˜˜#™“JˆEØ˜5˜6Ð"ˆAØ$%ˆJ�q—w‘w“yÒ!ñ		&÷&ð ÐùòQ÷&ð Ðús   Ž"B-°*B(ÁAB-Â(B-Â-B7c                 ón  — |€<dt        j                  «       j                  dd › d�}t        j	                  |«      sJ ‚t        |d«      5 }| j                  «       D ]@  \  }}t        |t        «      rdj                  |«      }n|}|j                  |› d|› d�«       ŒB 	 ddd«       |S # 1 sw Y   |S xY w)	z4 Write a Stanford CoreNLP properties dict to a file Nzcorenlp_server-é   z.propsrv   r³   z = z

)ÚuuidÚuuid4ÚhexrN   rO   rƒ   ÚitemsrÅ   rÍ   r…   Úwrite)rL  Ú	file_pathrR   rO  rQ  Úwriteable_vs         r   rÜ   rÜ   ï  s½   € àÐØ%¤d§j¡j£l×&6Ñ&6°s¸Ð&;Ð%<¸FÐCˆ	ä,×2Ñ2°9Ô=Ð=Ð=Ü	ˆi˜Ó	ð 9 Ø×$Ñ$Ó&ò 	9‰DˆAˆqÜ˜!œTÔ"Ø!Ÿh™h q›k‘à�Ø×Ñ ˜s # k ]°$Ð7Õ8ñ	9÷9ð Ð÷9ð Ðús   ÁAB*Â*B4c                 óÄ   — t        | d   «      D ����cg c]:  \  }}|j                  «       D ]"  \  }}|dk7  rt        |fi t        d|fg«      ¤Ž‘Œ$ Œ< }}}}}|S c c}}}}w )z�
    Transforms tokensregex and semgrex matches to indexed words.
    :param matches: unprocessed regex matches
    :return: flat array of indexed words
    Ú	sentencesÚlengthr$  )r#  rX  r.   )r  ÚiÚsrO  rQ  Úwordss         r   r  r  ÿ  sy   € ô # 7¨;Ñ#7Ó8÷5ñ 5Ù��AØŸ™›ò5á��A a¨8¢mô �!Ñ/”t˜j¨!˜_Ð-Ó.Ó/ð 5Ð/ð 5€Eó 5ð €Lùõ5s   ”?A
)r¯   r5   r=   r	   )NNNrJ   )4r:   re   rx   Úenumr  rK   Úrerl   Úloggingr$   rX   rz   r‚   r�   ÚsysrU  r   Úpathlibr   Úurllib.parser   Ústanza.protobufr   r   r   r	   Ú
__author__Ú	getLoggerr   ÚcompilerN   r   rÛ   r    r+   r3   Ú	Exceptionr5   r=   r?   rA   ÚEnumrC   rS   ÚobjectrU   r­   r¯   rR  rÜ   r  Ú__all__r;   r!   r   ú<module>rp     s/  ðñó Û Û Û 	Û 	Û 	Û Û Û Û Û Û Û Û 
Û å Ý Ý !ç _Ó _Ø8€
à	ˆ×	Ñ	˜8Ó	$€ð !+ §
¡
Ð+FÓ GÐ ò3€ð
 Ø
Ø
Ø
Ø
Ø
Ø
Ø
ñ	Ð ò.ò \Ð ó7ô	˜)ô 	ô
	Ð*ô 	ô
	˜9ô 	ô
	 ô 	ô�$—)‘)ô ò"ôz�Fô zózô*g.�Mô g.òTóò 	ò R�r!   