Ë
    çÍ:j5%  ã                   ó  — d Z ddlZddlmZ ddlmZmZmZmZ ddl	m
Z
 ddlmZ  ej                  d«      Z ej                  d«      Z ej                  d	«      Z ej                  d
ej"                  «      Z ej                  dej"                  «      Z ej                  dej"                  «      Z ej                  d«      Z G d„ d«      Z G d„ d«      Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zdd„Z e
d«      d„ «       Z ed«      Z y)z
CCG Lexicons
é    N)Údefaultdict)ÚCCGVarÚ	DirectionÚFunctionalCategoryÚPrimitiveCategory)Ú
deprecated)Ú
Expressionz([A-Za-z]+)(\[[A-Za-z,]+\])?z"([A-Za-z]+(?:\[[A-Za-z,]+\])?)(.*)z([\\/])([.,]?)([.,]?)(.*)z([\S_]+)\s*(::|[-=]+>)\s*(.+)z([^{}]*[^ {}])\s*(\{[^}]+\})?z\{([^}]+)\}z([^#]*)(?:#.*)?c                   ó0   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zy)	ÚTokenzÄ
    Class representing a token.

    token => category {semantics}
    e.g. eat => S\var[pl]/var {\x y.eat(x,y)}

    * `token` (string)
    * `categ` (string)
    * `semantics` (Expression)
    Nc                 ó.   — || _         || _        || _        y ©N)Ú_tokenÚ_categÚ
_semantics)ÚselfÚtokenÚcategÚ	semanticss       úe/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/nltk/ccg/lexicon.pyÚ__init__zToken.__init__9   s   € ØˆŒØˆŒØ#ˆ�ó    c                 ó   — | j                   S r   )r   ©r   s    r   r   zToken.categ>   s   € Ø�{‰{Ðr   c                 ó   — | j                   S r   )r   r   s    r   r   zToken.semanticsA   s   € Ø�‰Ðr   c                 óŠ   — d}| j                   �dt        | j                   «      z   dz   }dt        | j                  «      z   |z   S )NÚ z {ú})r   Ústrr   )r   Úsemantics_strs     r   Ú__str__zToken.__str__D   sB   € ØˆØ�?‰?Ð&Ø ¤3 t§¡Ó#7Ñ7¸#Ñ=ˆMØ”C˜Ÿ™Ó$Ñ$ }Ñ4Ð4r   c                 ó¢   — t        |t        «      syt        | j                  | j                  f|j                  «       |j                  «       «      S )Néÿÿÿÿ)Ú
isinstancer   Úcmpr   r   r   r   )r   Úothers     r   Ú__cmp__zToken.__cmp__J   s8   € Ü˜%¤Ô'ØÜ�D—K‘K §¡Ð1°5·;±;³=À%Ç/Á/ÓBSÓTÐTr   r   )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r    r&   © r   r   r   r   -   s!   „ ñ	ó$ò
òò5óUr   r   c                   ó(   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zy)Ú
CCGLexiconzâ
    Class representing a lexicon for CCG grammars.

    * `primitives`: The list of primitive categories for the lexicon
    * `families`: Families of categories
    * `entries`: A mapping of words to possible categories
    c                 óN   — t        |«      | _        || _        || _        || _        y r   )r   Ú_startÚ_primitivesÚ	_familiesÚ_entries)r   ÚstartÚ
primitivesÚfamiliesÚentriess        r   r   zCCGLexicon.__init__Y   s$   € Ü'¨Ó.ˆŒØ%ˆÔØ!ˆŒØˆ�r   c                 ó    — | j                   |   S )z@
        Returns all the possible categories for a word
        )r2   )r   Úwords     r   Ú
categorieszCCGLexicon.categories_   s   € ð �}‰}˜TÑ"Ð"r   c                 ó   — | j                   S )z;
        Return the target category for the parser
        )r/   r   s    r   r3   zCCGLexicon.starte   s   € ð �{‰{Ðr   c                 ó°   — d}d}t        | j                  «      D ]9  }|s|dz   }||z   dz   }d}| j                  |   D ]  }|s|dz   }nd}|d|z  z   }Œ Œ; |S )zK
        String representation of the lexicon. Used for debugging.
        r   Tú
z => z | Fz%s)Úsortedr2   )r   ÚstringÚfirstÚidentÚcats        r   r    zCCGLexicon.__str__k   sƒ   € ð ˆØˆÜ˜DŸM™MÓ*ò 	-ˆEÙØ $™�Ø˜e‘^ fÑ,ˆFàˆEØ—}‘} UÑ+ò -�ÙØ# e™^‘Fà!�EØ $¨¡*Ñ,‘ñ-ð	-ð ˆr   N)r'   r(   r)   r*   r   r9   r3   r    r+   r   r   r-   r-   P   s   „ ñò ò#òór   r-   c                 ó&  — | dd }d}|dk7  rZ|j                  d«      sI|j                  d«      rt        |«      \  }}||z   }n||d   z   }|dd }|dk7  r|j                  d«      sŒI|j                  d«      r
|dz   |dd fS t        d| z   dz   «      ‚)	zb
    Separate the contents matching the first set of brackets from the rest of
    the input.
    é   Nú(r   ú)r   zUnmatched bracket in string 'ú')Ú
startswithÚmatchBracketsÚAssertionError)r>   ÚrestÚinsideÚparts       r   rH   rH   …   s¯   € ð
 �!�"ˆ:€DØ€Fà
�"Š*˜TŸ_™_¨SÔ1Ø�?‰?˜3ÔÜ(¨Ó.‰LˆT�4Ø˜d‘]‰Fà˜d 1™gÑ%ˆFØ˜˜�8ˆDð �"Š*˜TŸ_™_¨SÕ1ð ‡��sÔØ˜‘˜d 1 2˜hÐ'Ð'Ü
Ð8¸6ÑAÀCÑGÓ
HÐHr   c                 ó€   — | j                  d«      rt        | «      S t        j                  | «      j	                  «       S )zb
    Separate the string for the next portion of the category from the rest
    of the string
    rD   )rG   rH   ÚNEXTPRIM_REÚmatchÚgroups)r>   s    r   ÚnextCategoryrQ   ™   s7   € ð
 ×Ñ˜ÔÜ˜VÓ$Ð$Ü×Ñ˜VÓ$×+Ñ+Ó-Ð-r   c                 ó&   — t        | d   | dd «      S )z'
    Parse an application operator
    r   rC   N)r   )Úapps    r   ÚparseApplicationrT   £   s   € ô �S˜‘V˜S  ˜WÓ%Ð%r   c                 ó2   — | r| dd j                  d«      S g S )z7
    Parse the subscripts for a primitive category
    rC   r"   ú,)Úsplit)Úsubscrs    r   ÚparseSubscriptsrY   ª   s#   € ñ Ø�a˜ˆ|×!Ñ! #Ó&Ð&Ø€Ir   c                 ó   — | d   dk(  r| d   €|€
t        «       }||fS | d   }||v r(||   \  }}|€|}||fS |j                  ||fg«      }||fS ||v rt        | d   «      }t        ||«      |fS t	        d|z   dz   «      ‚)zƒ
    Parse a primitive category

    If the primitive is the special category 'var', replace it with the
    correct `CCGVar`.
    r   ÚvarrC   zString 'z-' is neither a family nor primitive category.)r   Ú
substituterY   r   rI   )Úchunksr4   r5   r[   ÚcatstrrA   ÚcvarÚsubscrss           r   ÚparsePrimitiveCategoryra   ³   sÈ   € ð ˆa�y�EÒØ�!‰9ÐØˆ{Ü“h�Ø˜�:Ðà�A‰Y€FØ�ÑØ˜vÑ&‰ˆˆdØˆ;ØˆCð �SˆzÐð —.‘. 4¨ + Ó/ˆCØ�SˆzÐà�ÑÜ! &¨¡)Ó,ˆÜ! &¨'Ó2°CÐ8Ð8Ü
Ø�VÑÐMÑMóð r   c                 ó>  — t        | «      \  }}|j                  d«      rt        |dd |||«      \  }}n2t        t        j                  |«      j                  «       |||«      \  }}|dk7  r¯t        j                  |«      j                  «       }t        |dd «      }|d   }t        |«      \  }}|j                  d«      rt        |dd |||«      \  }	}n2t        t        j                  |«      j                  «       |||«      \  }	}t        ||	|«      }|dk7  rŒ¯||fS )z{
    Parse a string representing a category, and returns a tuple with
    (possibly) the CCG variable for the category
    rD   rC   r"   r   r   é   )
rQ   rG   ÚaugParseCategoryra   ÚPRIM_RErO   rP   ÚAPP_RErT   r   )
Úliner4   r5   r[   Ú
cat_stringrJ   ÚresrS   Ú	directionÚargs
             r   rd   rd   Ñ   s'  € ô
 & dÓ+Ñ€Z�à×Ñ˜SÔ!Ü% j°°2Ð&6¸
ÀHÈcÓR‰
ˆ‰cô ,Ü�M‰M˜*Ó%×,Ñ,Ó.°
¸HÀcó
‰
ˆˆcð �"Š*Ü�l‰l˜4Ó ×'Ñ'Ó)ˆÜ$ S¨¨1 XÓ.ˆ	Ø�1‰vˆä)¨$Ó/Ñˆ�TØ× Ñ  Ô%Ü)¨*°Q°rÐ*:¸JÈÐRUÓV‰JˆS‘#ä/Ü—‘˜jÓ)×0Ñ0Ó2°JÀÈ#ó‰JˆS�#ô !  c¨9Ó5ˆð �"‹*ð �ˆ:Ðr   c                 ót  — t        j                  «        g }i }t        t        «      }| j	                  «       D �]h  }t
        j                  |«      j                  «       d   j                  «       }|dk(  rŒ>|j                  d«      rB||dd j                  «       j                  d«      D �cg c]  }|j                  «       ‘Œ c}z   }Œ‘t        j                  |«      j                  «       \  }}}	t        j                  |	«      j                  «       \  }
}t        |
||«      \  }}|dk(  r||f||<   Œûd}|du rI|€t        |d	z   «      ‚t        j                   t"        j                  |«      j                  «       d   «      }||   j%                  t'        |||«      «       �Œk t)        |d   |||«      S c c}w )
z@
    Convert string representation into a lexicon for CCGs.
    r   r   z:-é   NrV   z::Tz@ must contain semantics because include_semantics is set to True)r   Úreset_idr   ÚlistÚ
splitlinesÚCOMMENTS_RErO   rP   ÚstriprG   rW   ÚLEX_REÚRHS_RErd   rI   r	   Ú
fromstringÚSEMANTICS_REÚappendr   r-   )Úlex_strÚinclude_semanticsr4   r5   r6   rg   Úprimr@   ÚsepÚrhsr^   r   rA   r[   r   s                  r   ru   ru   ñ   s¯  € ô ‡O�OÔØ€JØ€HÜœ$Ó€GØ×"Ñ"Ó$ó %Dˆä× Ñ  Ó&×-Ñ-Ó/°Ñ2×8Ñ8Ó:ˆØ�2Š:Øà�?‰?˜4Ô ð $Ø)-¨a¨b¨¯©Ó)9×)?Ñ)?ÀÓ)Dö'Ø!%�—
‘
•ò'ñ ‰Jô
 !'§¡¨TÓ 2× 9Ñ 9Ó ;ÑˆU�C˜Ü&,§l¡l°3Ó&7×&>Ñ&>Ó&@Ñ#ˆV�]Ü)¨&°*¸hÓG‰JˆS�#à�dŠ{ð $'¨ *�˜’à �	Ø$¨Ñ,Ø$Ð,Ü,Ø Ø`ñaóð ô
 %/×$9Ñ$9Ü(×.Ñ.¨}Ó=×DÑDÓFÀqÑIó%˜	ð
 ˜‘×%Ñ%¤e¨E°3¸	Ó&BÖCðK%DôL �j ‘m Z°¸7ÓCÐCùò9's   Â,F5zUse fromstring() instead.c                 ó   — t        | «      S r   )ru   )rx   s    r   ÚparseLexiconr~   "  s   € ä�gÓÐr   a¡  
    # Rather minimal lexicon based on the openccg `tinytiny' grammar.
    # Only incorporates a subset of the morphological subcategories, however.
    :- S,NP,N                    # Primitive categories
    Det :: NP/N                  # Determiners
    Pro :: NP
    IntransVsg :: S\NP[sg]    # Tensed intransitive verbs (singular)
    IntransVpl :: S\NP[pl]    # Plural
    TransVsg :: S\NP[sg]/NP   # Tensed transitive verbs (singular)
    TransVpl :: S\NP[pl]/NP   # Plural

    the => NP[sg]/N[sg]
    the => NP[pl]/N[pl]

    I => Pro
    me => Pro
    we => Pro
    us => Pro

    book => N[sg]
    books => N[pl]

    peach => N[sg]
    peaches => N[pl]

    policeman => N[sg]
    policemen => N[pl]

    boy => N[sg]
    boys => N[pl]

    sleep => IntransVsg
    sleep => IntransVpl

    eat => IntransVpl
    eat => TransVpl
    eats => IntransVsg
    eats => TransVsg

    see => TransVpl
    sees => TransVsg
    r   )F)!r*   ÚreÚcollectionsr   Únltk.ccg.apir   r   r   r   Únltk.internalsr   Únltk.sem.logicr	   Úcompilere   rN   rf   ÚUNICODErs   rt   rv   rq   r   r-   rH   rQ   rT   rY   ra   rd   ru   r~   Úopenccg_tinytinyr+   r   r   ú<module>r‡      s   ðñó 
Ý #ç QÓ QÝ %Ý %ð ˆ"�*‰*Ð8Ó
9€ð ˆb�j‰jÐBÓC€ð 
ˆ�‰Ð4Ó	5€ð 
ˆ�‰Ð8¸"¿*¹*Ó	E€ð 
ˆ�‰Ð8¸"¿*¹*Ó	E€ð ˆr�z‰zÐ,¨b¯j©jÓ9€ð ˆb�j‰jÐ.Ó/€÷ Uñ  U÷F-ñ -òjIò(.ò&òòó<ó@.Dñb Ð'Ó(ñó )ðñ ð)ó+Ñ r   