ó
    ´OÂf5%  ã                   ó  • S r SSKrSSKJr  SSKJrJrJrJr  SSK	J
r
  SSKJr  \R                  " S5      r\R                  " S5      r\R                  " S	5      r\R                  " S
\R"                  5      r\R                  " S\R"                  5      r\R                  " S\R"                  5      r\R                  " S5      r " S S5      r " S S5      rS rS rS rS rS rSS jrSS jr\
" S5      S 5       r\" S5      r g)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                   ó:   • \ rS rSrSrS
S jrS rS rS rS r	S	r
g)ÚTokené-   z¨
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                 ó(   • Xl         X l        X0l        g ©N)Ú_tokenÚ_categÚ
_semantics)ÚselfÚtokenÚcategÚ	semanticss       Ú2/usr/lib/python3/dist-packages/nltk/ccg/lexicon.pyÚ__init__ÚToken.__init__9   s   € ØŒØŒØ#�ó    c                 ó   • U R                   $ r   )r   ©r   s    r   r   ÚToken.categ>   s   € Ø�{‰{Ðr   c                 ó   • U R                   $ r   )r   r   s    r   r   ÚToken.semanticsA   s   € Ø�‰Ðr   c                 óŒ   • SnU R                   b  S[        U R                   5      -   S-   nS[        U R                  5      -   U-   $ )NÚ z {Ú})r   Ústrr   )r   Úsemantics_strs     r   Ú__str__ÚToken.__str__D   sB   € ØˆØ�?‰?Ñ&Ø ¤3 t§¡Ó#7Ñ7¸#Ñ=ˆMØ”C˜Ÿ™Ó$Ñ$ }Ñ4Ð4r   c                 ó¬   • [        U[        5      (       d  g[        U R                  U R                  4UR                  5       UR                  5       5      $ )Néÿÿÿÿ)Ú
isinstancer   Úcmpr   r   r   r   )r   Úothers     r   Ú__cmp__ÚToken.__cmp__J   s;   € Ü˜%¤×'Ñ'ØÜ�D—K‘K §¡Ð1°5·;±;³=À%Ç/Á/ÓBSÓTÐTr   )r   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   r   r$   r+   Ú__static_attributes__© r   r   r   r   -   s!   † ñ	ô$ò
òò5õUr   r   c                   ó0   • \ rS rSrSrS rS rS rS rSr	g)	Ú
CCGLexiconéP   zÎ
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                 óH   • [        U5      U l        X l        X0l        X@l        g r   )r   Ú_startÚ_primitivesÚ	_familiesÚ_entries)r   ÚstartÚ
primitivesÚfamiliesÚentriess        r   r   ÚCCGLexicon.__init__Y   s   € Ü'¨Ó.ˆŒØ%ÔØ!ŒØ�r   c                 ó    • U R                   U   $ )z0
Returns all the possible categories for a word
)r;   )r   Úwords     r   Ú
categoriesÚCCGLexicon.categories_   s   € ð �}‰}˜TÑ"Ð"r   c                 ó   • U R                   $ )z+
Return the target category for the parser
)r8   r   s    r   r<   ÚCCGLexicon.starte   s   € ð �{‰{Ðr   c                 óÊ   • SnSn[        U R                  5       HE  nU(       d  US-   nX-   S-   nSnU R                  U    H  nU(       d  US-   nOSnUSU-  -   nM     MG     U$ )z;
String representation of the lexicon. Used for debugging.
r    TÚ
z => z | Fz%s)Úsortedr;   )r   ÚstringÚfirstÚidentÚcats        r   r$   ÚCCGLexicon.__str__k   sw   € ð ˆØˆÜ˜DŸM™MÖ*ˆEÞØ $™�Ø‘^ fÑ,ˆFàˆEØ—}‘} UÔ+�ÞØ# e™^‘Fà!�EØ $¨¡*Ñ,’ó ,ñ +ð ˆr   )r;   r:   r9   r8   N)
r-   r.   r/   r0   r1   r   rC   r<   r$   r2   r3   r   r   r5   r5   P   s   † ñò ò#òõr   r5   c                 óN  • U SS nSnUS:w  ah  UR                  S5      (       dR  UR                  S5      (       a  [        U5      u  p1X#-   nOX!S   -   nUSS nUS:w  a  UR                  S5      (       d  MR  UR                  S5      (       a
  US-   USS 4$ [        SU -   S-   5      e)	zV
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)rJ   ÚrestÚinsideÚparts       r   rU   rU   …   sµ   € ð
 �!�"ˆ:€DØ€Fà
�"‹*˜TŸ_™_¨S×1Ñ1Ø�?‰?˜3×ÑÜ(¨Ó.‰LˆTØ‘]‰Fà 1™gÑ%ˆFØ˜˜�8ˆDð �"‹*˜TŸ_™_¨S×1Ó1ð ‡��s×ÑØ˜‘˜d 1 2˜hÐ'Ð'Ü
Ð8¸6ÑAÀCÑGÓ
HÐHr   c                 óŠ   • U R                  S5      (       a  [        U 5      $ [        R                  U 5      R	                  5       $ )zV
Separate the string for the next portion of the category from the rest
of the string
rQ   )rT   rU   ÚNEXTPRIM_REÚmatchÚgroups)rJ   s    r   ÚnextCategoryr^   ™   s:   € ð
 ×Ñ˜×ÑÜ˜VÓ$Ð$Ü×Ñ˜VÓ$×+Ñ+Ó-Ð-r   c                 ó&   • [        U S   U SS 5      $ )z
Parse an application operator
r   rP   N)r   )Úapps    r   ÚparseApplicationra   £   s   € ô �S˜‘V˜S  ˜WÓ%Ð%r   c                 ó<   • U (       a  U SS R                  S5      $ / $ )z/
Parse the subscripts for a primitive category
rP   r'   Ú,)Úsplit)Úsubscrs    r   ÚparseSubscriptsrf   ª   s#   € ö Ø�a˜ˆ|×!Ñ! #Ó&Ð&Ø€Ir   c                 óþ   • U S   S:X  a  U S   c  Uc
  [        5       nX34$ U S   nXB;   a$  X$   u  pVUc  UnXS4$ UR                  Xc4/5      nXS4$ XA;   a  [        U S   5      n[        XG5      U4$ [	        SU-   S-   5      e)zs
Parse a primitive category

If the primitive is the special category 'var', replace it with the
correct `CCGVar`.
r   ÚvarrP   zString 'z-' is neither a family nor primitive category.)r   Ú
substituterf   r   rV   )Úchunksr=   r>   rh   ÚcatstrrM   ÚcvarÚsubscrss           r   ÚparsePrimitiveCategoryrn   ³   s¶   € ð ˆa�y�EÓØ�!‰9ÑØ‰{Ü“h�Ø�:Ðà�A‰Y€FØÓØÑ&‰ˆØ‰;ØˆCð ˆzÐð —.‘. 4 + Ó/ˆCØˆzÐàÓÜ! &¨¡)Ó,ˆÜ! &Ó2°CÐ8Ð8Ü
Ø�VÑÐMÑMóð r   c                 ó@  • [        U 5      u  pEUR                  S5      (       a  [        USS XU5      u  pcO0[        [        R                  U5      R                  5       XU5      u  pcUS:w  a°  [        R                  U5      R                  5       n[        USS 5      nUS   n[        U5      u  pEUR                  S5      (       a  [        USS XU5      u  p“O0[        [        R                  U5      R                  5       XU5      u  p“[        XiU5      nUS:w  a  M°  Xc4$ )zo
Parse a string representing a category, and returns a tuple with
(possibly) the CCG variable for the category
rQ   rP   r'   r    r   é   )
r^   rT   ÚaugParseCategoryrn   ÚPRIM_REr\   r]   ÚAPP_REra   r   )
Úliner=   r>   rh   Ú
cat_stringrW   Úresr`   Ú	directionÚargs
             r   rq   rq   Ñ   s  € ô
 & dÓ+Ñ€Zà×Ñ˜S×!Ñ!Ü% j°°2Ð&6¸
ÈcÓR‰
ˆˆcô ,Ü�M‰M˜*Ó%×,Ñ,Ó.°
Àcó
‰
ˆð �"‹*Ü�l‰l˜4Ó ×'Ñ'Ó)ˆÜ$ S¨¨1 XÓ.ˆ	Ø�1‰vˆä)¨$Ó/ÑˆØ× Ñ  ×%Ñ%Ü)¨*°Q°rÐ*:¸JÐRUÓV‰JˆS�#ä/Ü—‘˜jÓ)×0Ñ0Ó2°JÈ#ó‰JˆSô ! ¨9Ó5ˆð �"�*ð ˆ:Ðr   c                 óˆ  • [         R                  " 5         / n0 n[        [        5      nU R	                  5        GHq  n[
        R                  U5      R                  5       S   R                  5       nUS:X  a  M@  UR                  S5      (       aE  UUSS R                  5       R                  S5       Vs/ s H  ofR                  5       PM     sn-   nM›  [        R                  U5      R                  5       u  pxn	[        R                  U	5      R                  5       u  p«[        X¢U5      u  pÍUS:X  a  XÍ4X7'   GM  SnUSL aK  Uc  [        US	-   5      e[        R                   " ["        R                  U5      R                  5       S   5      nXG   R%                  ['        X|U5      5        GMt     [)        US   X#U5      $ s  snf )
z8
Convert string representation into a lexicon for CCGs.
r   r    z:-é   Nrc   z::Tz@ must contain semantics because include_semantics is set to True)r   Úreset_idr   ÚlistÚ
splitlinesÚCOMMENTS_REr\   r]   ÚstriprT   rd   ÚLEX_REÚRHS_RErq   rV   r	   Ú
fromstringÚSEMANTICS_REÚappendr   r5   )Úlex_strÚinclude_semanticsr=   r>   r?   rt   ÚprimrL   ÚsepÚrhsrk   r#   rM   rh   r   s                  r   r‚   r‚   ñ   sœ  € ô ‡O‚OÔØ€JØ€HÜœ$Ó€GØ×"Ñ"×$ˆä× Ñ  Ó&×-Ñ-Ó/°Ñ2×8Ñ8Ó:ˆØ�2‹:Ùà�?‰?˜4× Ñ ð $Ø)-¨a¨b¨¯©Ó)9×)?Ñ)?ÀÔ)Dó'Ú)D —
‘
–Ñ)Dñ'ñ ŠJô
 !'§¡¨TÓ 2× 9Ñ 9Ó ;ÑˆU˜Ü&,§l¡l°3Ó&7×&>Ñ&>Ó&@Ñ#ˆVÜ)¨&¸hÓG‰JˆSà�d‹{ð $' *�”à �	Ø$¨Ò,Ø$Ñ,Ü,Ø Ø`ñaóð ô
 %/×$9Ò$9Ü(×.Ñ.¨}Ó=×DÑDÓFÀqÑIó%˜	ð
 ‘×%Ñ%¤e¨E¸	Ó&B×CñK %ôL �j ‘m Z¸7ÓCÐCùò9's   Â4F?zUse fromstring() instead.c                 ó   • [        U 5      $ r   )r‚   )r…   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)!r1   ÚreÚcollectionsr   Únltk.ccg.apir   r   r   r   Únltk.internalsr   Únltk.sem.logicr	   Úcompilerr   r[   rs   ÚUNICODEr€   r�   rƒ   r~   r   r5   rU   r^   ra   rf   rn   rq   r‚   r‹   Úopenccg_tinytinyr3   r   r   Ú<module>r”      s  ðñó 
Ý #ç QÓ QÝ %Ý %ð �*Š*Ð8Ó
9€ð �jŠjÐBÓC€ð 
�ŠÐ4Ó	5€ð 
�ŠÐ8¸"¿*¹*Ó	E€ð 
�ŠÐ8¸"¿*¹*Ó	E€ð �zŠzÐ,¨b¯j©jÓ9€ð �jŠjÐ.Ó/€÷ Uñ  U÷F-ñ -òjIò(.ò&òòô<ô@.Dñb Ð'Ó(ñó )ðñ ð)ó+Ñ r   