Ë
    çÍ:j!  ã                   ó¶   — d Z ddlZ	 ddlmZ ddlmZ  ej                  d«      Z
 G d	„ d
«      Zd„ Zd„ Zefd„Zefd„Zd„ Zd„ Zy# e$ r d„ Zd„ Zd„ ZY ŒCw xY w)zž

A port of the Gale-Church Aligner.

Gale & Church (1993), A Program for Aligning Sentences in Bilingual Corpora.
https://aclweb.org/anthology/J93-1004.pdf

é    N)Úlogsf)Únormc                 óð   — t        | «      }ddd|z  z   z  }|t        j                  | |z  dz
  |d|d|d|d|d|d	|d
|d|dz  z   z  z   z  z   z  z   z  z   z  z   z  z   z  z   z  z   «      z  }| dk\  r|S d|z
  S )zComplementary error function.é   ç      à?gÅ›ˆÀ‰?ô?gˆ5�Ô ð?gê`ygñ×?gðÃÞÙÆ¸?g¥êª‚IØÇ¿gæ#vùØÑ?g€9¦Ë)ò¿g¾¡SöÐ÷?gýÞ…1Oê¿g¤¥v¯(ßÅ?g        g       @)ÚabsÚmathÚexp)ÚxÚzÚtÚrs       úo/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/nltk/translate/gale_church.pyÚerfccr      sß   € ä�‹FˆØ��S˜1‘W‘ÑˆØ”—‘ØˆB�‰FØñààØàØà"Øà'Øà *Ø"#à$/Ø&'Ø'1°A¸ÀqÈ:Á~Ñ9UÑ4VÑ'Vñ'Xñ%Xñ#"ñ!"ñ	ñ
ññññññññó
ñ 
ˆð< �Š8ØˆHà˜‘7ˆNó    c                 óP   — ddt        | t        j                  d«      z  «      z  z
  S )u>   Return the area under the normal distribution from M{-âˆž..x}.r   r   é   )r   r	   Úsqrt©r   s    r   Únorm_cdfr   @   s$   € à�3œ˜q¤4§9¡9¨Q£<Ñ/Ó0Ñ0Ñ0Ð0r   c                 óz   — 	 t        j                  dt        | «      z
  «      S # t        $ r t	        d«      cY S w xY w)Nr   ú-inf)r	   Úlogr   Ú
ValueErrorÚfloatr   s    r   Ú
norm_logsfr   D   s7   € ð	!Ü—8‘8˜A¤¨£™OÓ,Ð,øÜò 	!Ü˜“=Ò ð	!ús   ‚ # £:¹:r   c                   ó&   — e Zd ZdddddddœZdZdZy)	ÚLanguageIndependentgõÛ×�sF„?g{®Gázì?gbX9´È¶?gºI+‡†?))r   r   )r   r   )r   r   )r   r   )r   r   )r   r   r   g333333@N)Ú__name__Ú
__module__Ú__qualname__ÚPRIORSÚAVERAGE_CHARACTERSÚVARIANCE_CHARACTERS© r   r   r   r   N   s+   „ ð ØØØØØñ€Fð ÐØÑr   r   c                 óš  — g }t        |«      t        |«      f}|dk7  rˆt        d„ |D «       «      rv	 | |   \  }}t        |«      D ]7  }t        |«      D ]'  }|j	                  |d   |z
  dz
  |d   |z
  dz
  f«       Œ) Œ9 |d   |z
  |d   |z
  f}|dk7  rt        d„ |D «       «      rŒv|ddd…   S # t        $ r |d   dz
  |d   dz
  f}Y Œ°w xY w)aà  
    Traverse the alignment cost from the tracebacks and retrieves
    appropriate sentence pairs.

    :param backlinks: A dictionary where the key is the alignment points and value is the cost (referencing the LanguageIndependent.PRIORS)
    :type backlinks: dict
    :param source_sents_lens: A list of target sentences' lengths
    :type source_sents_lens: list(int)
    :param target_sents_lens: A list of target sentences' lengths
    :type target_sents_lens: list(int)
    )r   r   c              3   ó&   K  — | ]	  }|d k\  –— Œ y­w)r   Nr%   )Ú.0Úps     r   ú	<genexpr>ztrace.<locals>.<genexpr>n   s   è ø€ Ò$>° Q¨!¥VÑ$>ùs   ‚r   r   Néÿÿÿÿ)ÚlenÚallÚ	TypeErrorÚrangeÚappend)	Ú	backlinksÚsource_sents_lensÚtarget_sents_lensÚlinksÚpositionÚsr   ÚiÚjs	            r   Útracer9   `   s  € ð €EÜÐ%Ó&¬Ð,=Ó(>Ð?€HØ
�fÒ
¤Ñ$>°XÔ$>Ô!>ð	Ø˜XÑ&‰DˆAˆqô �q“ò 	IˆAÜ˜1“Xò I�Ø—‘˜h q™k¨A™o°Ñ1°8¸A±;À±?ÀQÑ3FÐGÕHñIð	Ið ˜Q‘K !‘O X¨a¡[°1¡_Ð5ˆð �fÒ
¤Ñ$>°XÔ$>Õ!>ð ‘�2�‰;Ðøô ò 	Ø  ™ a™¨°!©°q©Ð9ˆHÙð	ús   ±B. Â.C
Ã	C
c                 óÖ  ‡ ‡‡‡— t        ˆ ˆfd„t        |d   «      D «       «      }t        ˆˆfd„t        |d   «      D «       «      }	 |||j                  z  z   dz  }||j                  z  |z
  t        j                  ||j
                  z  «      z  }	t        t        t        |	«      «      z   t        j                  |j                  |   «      z    S # t        $ r t        d«      cY S w xY w)aP  Returns the log probability of the two sentences C{source_sents[i]}, C{target_sents[j]}
    being aligned with a specific C{alignment}.

    @param i: The offset of the source sentence.
    @param j: The offset of the target sentence.
    @param source_sents: The list of source sentence lengths.
    @param target_sents: The list of target sentence lengths.
    @param alignment: The alignment type, a tuple of two integers.
    @param params: The sentence alignment parameters.

    @returns: The log probability of a specific alignment between the two sentences, given the parameters.
    c              3   ó4   •K  — | ]  }‰‰|z
  d z
     –— Œ y­w©r   Nr%   )r(   Úoffsetr7   Úsource_sentss     €€r   r*   z!align_log_prob.<locals>.<genexpr>‰   ó   øè ø€ ÒM¨vˆl˜1˜v™:¨™>Õ*ÑMùó   ƒr   c              3   ó4   •K  — | ]  }‰‰|z
  d z
     –— Œ y­wr<   r%   )r(   r=   r8   Útarget_sentss     €€r   r*   z!align_log_prob.<locals>.<genexpr>Š   r?   r@   r   r   r   )Úsumr/   r#   r	   r   r$   ÚZeroDivisionErrorr   ÚLOG2r   r   r   r"   )
r7   r8   r>   rB   Ú	alignmentÚparamsÚl_sÚl_tÚmÚdeltas
   ````      r   Úalign_log_probrL   |   sÖ   û€ ô ÔM¼¸yÈ¹|Ó9LÔMÓ
M€CÜ
ÔM¼¸yÈ¹|Ó9LÔMÓ
M€Cðð �3˜×2Ñ2Ñ2Ñ2°aÑ7ˆØ�v×0Ñ0Ñ0°3Ñ6¼$¿)¹)Ø�×*Ñ*Ñ*ó;
ñ 
ˆô ”Jœs 5›zÓ*Ñ*¬T¯X©X°f·m±mÀIÑ6NÓ-OÑOÐPÐPøô ò Ü�V‹}Òðús   ÁA
C ÃC(Ã'C(c                 óJ  — t        |j                  j                  «       «      }g g}i }t        t	        | «      dz   «      D ]Õ  }t        t	        |«      dz   «      D ]‰  }t        d«      }d}	|D ]J  }
d|
d   z
  }||
d   z
  }|t	        |«       k  s|dk  rŒ(||   |   t        ||| ||
|«      z   }||k  sŒG|}|
}	ŒL |t        d«      k(  rd}|	|||f<   |d   j                  |«       Œ‹ t	        |«      dkD  r|j                  d«       |j                  g «       Œ× t        || |«      S )a¡  Return the sentence alignment of two text blocks (usually paragraphs).

        >>> align_blocks([5,5,5], [7,7,7])
        [(0, 0), (1, 1), (2, 2)]
        >>> align_blocks([10,5,5], [12,20])
        [(0, 0), (1, 1), (2, 1)]
        >>> align_blocks([12,20], [10,5,5])
        [(0, 0), (1, 1), (1, 2)]
        >>> align_blocks([10,2,10,10,2,10], [12,3,20,3,12])
        [(0, 0), (1, 1), (2, 2), (3, 2), (4, 3), (5, 4)]

    @param source_sents_lens: The list of source sentence lengths.
    @param target_sents_lens: The list of target sentence lengths.
    @param params: the sentence alignment parameters.
    @return: The sentence alignments, a list of index pairs.
    r   ÚinfNr+   r   r   )
Úlistr"   Úkeysr/   r,   r   rL   r0   Úpopr9   )r2   r3   rG   Úalignment_typesÚDr1   r7   r8   Úmin_distÚ	min_alignÚaÚprev_iÚprev_jr)   s                 r   Úalign_blocksrY   ˜   sX  € ô$ ˜6Ÿ=™=×-Ñ-Ó/Ó0€Oð 
ˆ€Aà€Iä”3Ð(Ó)¨AÑ-Ó.ò ˆÜ”sÐ,Ó-°Ñ1Ó2ò 	#ˆAÜ˜U“|ˆHØˆIØ$ò 
"�Ø˜a ™d™�Ø˜Q˜q™T™�ØœS ›V˜GÒ# v°¢zØØ�f‘I˜fÑ%¬Ø�qÐ+Ð->ÀÀ6ó)ñ �ð �x“<Ø �HØ !‘Ið
"ð œ5 ›<Ò'Ø�à )ˆI�q˜!�fÑØˆb‰E�L‰L˜Õ"ð'	#ô* ˆq‹6�AŠ:Ø�E‰E�!ŒHØ	�‰��ð1ô4 �Ð-Ð/@ÓAÐAr   c           	      ó¦   — t        | «      t        |«      k7  rt        d«      ‚t        | |«      D ��cg c]  \  }}t        |||«      ‘Œ c}}S c c}}w )aû  Creates the sentence alignment of two texts.

    Texts can consist of several blocks. Block boundaries cannot be crossed by sentence
    alignment links.

    Each block consists of a list that contains the lengths (in characters) of the sentences
    in this block.

    @param source_blocks: The list of blocks in the source text.
    @param target_blocks: The list of blocks in the target text.
    @param params: the sentence alignment parameters.

    @returns: A list of sentence alignment lists
    z>Source and target texts do not have the same number of blocks.)r,   r   ÚziprY   )Úsource_blocksÚtarget_blocksrG   Úsource_blockÚtarget_blocks        r   Úalign_textsr`   Î   s\   € ô ˆ=ÓœS Ó/Ò/ÜØLó
ð 	
ô +.¨m¸]Ó*K÷á&ˆL˜,ô 	�\ <°Õ8óð ùó s   ²Ac              #   óN   ‡ ‡K  — ˆ ˆfd„}	  |‰ j                  «       «      –— Œ­w)záSplits an iterator C{it} at values of C{split_value}.

    Each instance of C{split_value} is swallowed. The iterator produces
    subiterators which need to be consumed fully before the next subiterator
    can be used.
    c              3   óR   •K  — | }|‰k7  r|–— ‰j                  «       }|‰k7  rŒy y ­w©N©Únext)ÚfirstÚvÚitÚsplit_values     €€r   Ú_chunk_iteratorz!split_at.<locals>._chunk_iteratoró   s.   øè ø€ ØˆØ�;ÒØŠGØ—‘“	ˆAð �;Õùs   ƒ!'¥'rd   )rh   ri   rj   s   `` r   Úsplit_atrk   ë   s'   ùè ø€ õð Ù˜bŸg™g›iÓ(Ò(ð ùs   „!%c                 ó    — t        | |«      D ��cg c],  }t        ||«      D �cg c]  }t        d„ |D «       «      ‘Œ c}‘Œ. c}}S c c}w c c}}w )z¶Parses a stream of tokens and splits it into sentences (using C{soft_delimiter} tokens)
    and blocks (using C{hard_delimiter} tokens) for use with the L{align_texts} function.
    c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wrc   )r,   )r(   Útokens     r   r*   z%parse_token_stream.<locals>.<genexpr>  s   è ø€ Ò4˜u”�E—
Ñ4ùs   ‚)rk   rC   )ÚstreamÚsoft_delimiterÚhard_delimiterÚblock_itÚsentence_its        r   Úparse_token_streamrt   ý   sW   € ô ! ¨Ó8÷ð
 ô  (¨°.ÓAö	
àô Ñ4¨Ô4Õ4ô	
óð ùò	
ùós   �A
£A¼A
ÁA
)Ú__doc__r	   r   r   r   Úscipy.statsÚImportErrorr   r   r   rE   r   r9   rL   rY   r`   rk   rt   r%   r   r   ú<module>rx      s†   ðñó ð4!Ý(Ý ðj €t‡x�x�ƒ{€÷ñ ò$ò8Qð8 ?Ró 3Bðl 6Ió ò:)ó$
øðM ò 1!ò%òN1ô!ð[1!ús   ˆA ÁAÁA