
    /hr                     0   S SK r S SKJr  S SKrS SKJr  S SKJrJr  S SK	J
r
JrJrJrJr  S SKJrJrJrJr  SSSS	S
SS.r/ SQr " S S5      r " S S\5      r " S S5      r " S S\5      r " S S\5      r " S S\5      rSS jr\S:X  a  \" 5         gg)    N)chain)Counter)drtlinearlogic)AbstractVariableExpression
ExpressionLambdaExpressionVariableVariableExpression)BigramTaggerRegexpTaggerTrigramTaggerUnigramTaggerex_quant
univ_quantdef_artno_quant)aaneverythenodefault)nmodvmodpunctc                   d    \ rS rSrSS jrS rS rS rS rSS jr	S	 r
S
 rS rS rS rS rSrg)GlueFormula$   Nc                 
   U(       d
  [        5       n[        U[        5      (       a  [        R                  " U5      U l        O9[        U[        5      (       a  Xl        O[        SU< SUR                  < 35      e[        U[        5      (       a*  [        R                  " 5       R                  U5      U l        OC[        U[        R                  5      (       a  X l        O[        SU< SUR                  < 35      eX0l        g Nz+Meaning term neither string or expression: , z(Glue term neither string or expression: )set
isinstancestrr   
fromstringmeaningRuntimeError	__class__r   LinearLogicParserparseglueindicesselfr'   r,   r-   s       E/var/www/auris/envauris/lib/python3.13/site-packages/nltk/sem/glue.py__init__GlueFormula.__init__%   s    eGgs##%009DL,,"LG--/ 
 dC  #557==dCDIk4455I) 
     c                    U R                   UR                   -  (       a  [        R                  " SU  SU S35      eU R                   UR                   -  n [        R                  " U R                  UR                  UR                   5      nUR                  nU(       aY  U R                  R                  5       R                  R                  SSS2    H!  nU R                  [        SU-  5      U5      nM#     U R                  R                  U5      nU R                  XsU5      $ ! [        R                   a?  n[        R                  " SU R                  5        SUR                  5        S35      UeSnAff = f)zaself = (\x.(walk x), (subj -o f))
arg  = (john        ,  subj)
returns ((walk john),          f)
'z' applied to 'z'.  Indices are not disjoint.Nzv%s)r-   r   LinearLogicApplicationExceptionApplicationExpressionr,   simplifyr'   
antecedentdependenciesmake_LambdaExpressionr
   applytor)   )r/   argreturn_indicesreturn_glueearg_meaning_abstracteddepreturn_meanings           r0   r=   GlueFormula.applyto?   sL   
 <<#++%==D6u,IJ  "\\CKK7N	%;;		388S[[K "%yy))+66CC" *.)C)CUS[)+A*& --.DE~~n>JJ :: 	==DMMO$N3<<>2B!D	s   6D% %E89:E33E8c                     [        U5      $ N)r   r/   names     r0   make_VariableExpression#GlueFormula.make_VariableExpression`   s    !$''r3   c                     [        X5      $ rG   )r	   r/   variableterms      r0   r<   !GlueFormula.make_LambdaExpressionc   s    //r3   c                 D   [        U[        5      (       d   e[        UR                  [        5      (       d   eU R	                  U R                  UR                  R                  U R                  5      [        R                  " UR                  U R                  5      5      $ rG   )
r$   r   r'   r   r)   r<   rN   r   ImpExpressionr,   r/   others     r0   lambda_abstractGlueFormula.lambda_abstractf   st    %----%--)CDDDD~~&&u}}'='=t||L%%ejj$))<
 	
r3   c                     U(       d
  [        5       nU R                  R                  5       R                  XR                  5      u  p#UU R	                  U R
                  X!R                  5       15      /-   $ )z)From Iddo Lev's PhD Dissertation p108-109)r   r,   r9   compile_posr)   r'   get)r/   countercompiled_glue	new_formss       r0   compileGlueFormula.compilen   sa    iG%)YY%7%7%9%E%E^^&
" NN4<<H
 
 	
r3   c                     U R                  U R                  R                  5       U R                  R                  5       U R                  5      $ rG   )r)   r'   r9   r,   r-   r/   s    r0   r9   GlueFormula.simplifyy   s8    ~~LL!!#TYY%7%7%94<<
 	
r3   c                     U R                   UR                   :H  =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ rG   )r)   r'   r,   rS   s     r0   __eq__GlueFormula.__eq__~   sA    NNeoo- (-(		UZZ'	
r3   c                     X:X  + $ rG    rS   s     r0   __ne__GlueFormula.__ne__   s      r3   c                 0    [        U 5      [        U5      :  $ rG   r%   rS   s     r0   __lt__GlueFormula.__lt__   s    4y3u:%%r3   c                    [        U R                  [        5      (       d   eU R                   SU R                   3nU R                  (       a4  USSR                  S [        U R                  5       5       5      -   S-   -  nU$ )N : z : {r"   c              3   8   #    U  H  n[        U5      v   M     g 7frG   rj   ).0indexs     r0   	<genexpr>&GlueFormula.__str__.<locals>.<genexpr>   s     "P;O%3u::;Os   })r$   r-   r#   r'   r,   joinsorted)r/   accums     r0   __str__GlueFormula.__str__   so    $,,,,,,<<.DII;/<<"P6$,,;O"PPPSVVE r3   c                     SU -  $ )N%srf   r`   s    r0   __repr__GlueFormula.__repr__   s    d{r3   r,   r-   r'   rG   )__name__
__module____qualname____firstlineno__r1   r=   rJ   r<   rU   r]   r9   rc   rg   rk   rx   r|   __static_attributes__rf   r3   r0   r   r   $   s@    4KB(0
	



!&r3   r   c                   z    \ rS rSrSS jrSS jrS rSS jrS rS r	S	 r
S
 rS rS rS rS rS rS rS rSrg)GlueDict   Nc                 <    Xl         X l        U R                  5         g rG   )filenamefile_encoding	read_file)r/   r   encodings      r0   r1   GlueDict.__init__   s     %r3   c                    U(       a  U R                  5          [        R                  R                  U R                  SU R
                  S9nUR                  5       nU GH  nUR                  5       n[        U5      (       d  M&  US   S:X  a  M1  UR                  SS5      n/ nSnSn	Sn
S n[        U5      S:  a  [        US   5       H  u  pUS	:X  a  US:X  a  US-   n	US-  nM  US
:X  a3  US-  nUS:X  a&  US   X nUS   U
S-   U nUR                  X/5        MT  MV  US:X  a  US:X  a  Un
Mf  Mh  US:X  d  Mp  US:w  a  [        SU-   5      e  O   [        U5      S:  ac  US   R                  S5      S-   nUS   R                  S5      nUU:X  a  [        5       nO'[        S US   UU R                  S5       5       5      n US   R                  S	5      nUS   R                  S
5      nUS   S U R                  5       nUS   US-   U nUU ;  a  0 U U'   Uc  U(       aV  U U    HJ  nUU U   ;  a  / U U   U'   U U   U   nU U   U   R!                  U5        U U   U   R!                  U5        ML     GM  S U U   ;  a  / U U   S '   U U   S    R!                  U5        GMD  XU   ;  a  / U U   U'   U(       a  U U   U   R!                  U U   U   5        U U   U   R!                  U5        GM     g ! [         aR  n [        R                  R                  SU R                  -   SU R
                  S9n S nAGN! [         a    Uef = fS nAff = f!   US   R                  5       nS n GN`= f)Ntext)formatr   zfile:r   #rn         (),z&Formula syntax is incorrect for entry []c              3   @   #    U  H  oR                  5       v   M     g 7frG   )strip)rp   rs     r0   rr   %GlueDict.read_file.<locals>.<genexpr>   s      .+Qa		+Qs   )clearnltkdataloadr   r   LookupError
splitlinesr   lensplit	enumerateappendr(   rq   	frozensetextend)r/   empty_firstcontentsrA   lineslinepartsglue_formulasparen_counttuple_starttuple_commarelationshipsicmeaning_term	glue_term	rel_startrel_endstart_inheritanceend_inheritancesem	supertyperelsr,   s                           r0   r   GlueDict.read_file   s   JJL	yy~~ft7I7I & H ##%D::<Dt99Aw#~JJqE MKKK M5zA~%eAh/DACx&!+*+a%K#q(c#q(&!++08 +,L ).aq1(EI)00!- 9 , c'1,*+K - c'1,". H4 O#  7 0: 5zA~!!HNN3/!3	(..-'$-KM$- .+08Ig+F+L+LS+Q. %M!$)!HNN3$7!"'(.."5Ah1 1288:!!H%6%:_M	
 $S	 %  $YtCy0.0DIdO#It4S	$..t4S	$..) !0 49,*,S	$IdO**% !S	1/1DIm,Im,33DOM4RSS	-(//!   	99>>dmm+FTEWEW *   	R!Ahnn& 	s0   3K3 A	M3
M>6L::MM

MM,c                 
   SnU  Hz  nSU-  nX    Hj  nSnX   U    HZ  nUS:X  a  XS-   -  nOUS[        U5      S-   -  -  nUSU-  -  nU(       a  U[        X   U   5      :X  a  USU-  -  nUS-  nUS-  nM\     Ml     M|     U$ )	N r{   r   z:  r   z : %s
)r   )r/   rw   posstr_posrelsetr   gfs          r0   rx   GlueDict.__str__  s    CSjG))F+BAv4/Gq(8!99TBY&E!s49V+<'="=6!11TMEFA , $  r3   c           	         Ucl  UR                   S   n[        [        R                  " US   R	                  5       5      5      nUR                   US      nU R                  X[        5       U5      $ U R                  X!U5      n[        R                  " US   R	                  5       5       H3  n	UR                   U	   n
UR                  U R                  XX45      5        M5     U$ )Nr   deps)	nodeslistr   from_iterablevaluesto_glueformula_listr   lookupr   )r/   depgraphnoderZ   verbosetopdepListrootglueformulasdep_idxrC   s              r0   r   GlueDict.to_glueformula_list&  s    <..#C5..s6{/A/A/CDEG>>'!*-D++HGIwOO{{47;**4<+>+>+@AG..)C((I B
 r3   c           	      .   U R                  U5      nS nU H  nX`;   d  M
  X   n  O   Uc  / $ U R                  X5        U R                  XQU5      n[        U5      (       d!  [	        SUS   < SUS   < SUS   < S35      eU R                  XqS   XU5      $ )Nz,There is no GlueDict entry for sem type of 'wordz' with tag 'tagz', and rel 'relr5   )get_semtypesadd_missing_dependencies_lookup_semtype_optionr   KeyError#get_glueformulas_from_semtype_entry)r/   r   r   rZ   semtype_namessemtyperI   r   s           r0   r   GlueDict.lookup7  s    ))$/!D|* " ?I%%d5,,WHE6{{15ftE{DQVKY 
 77L$'
 	
r3   c                     US   R                  5       nUS:X  aY  UR                  US      nU R                  SXB5      nUS   nUS   R                  U/ 5        US   U   R	                  US   5        g g )Nr   mainheadsubjr   address)lowerr   lookup_unique
setdefaultr   )r/   r   r   r   headnoder   relations          r0   r   !GlueDict.add_missing_dependenciesQ  s|    5k!&=~~d6l3H%%fhADE{HL##Hb1L"))$y/: r3   c                 Z  ^ [        U4S j[        R                  " US   R                  5       5       5       5      n X   nU$ ! [         a]    [        5       n[        U5      S 1-
   H&  n[        U5      [        U5      :  d  M  Xt:  d  M$  UnM(     U(       d  S U;   a  S nO g X   n U$ f = f)Nc              3      >#    U  HO  nTR                   U   S    R                  5       [        ;  d  M-  TR                   U   S    R                  5       v   MQ     g7f)r   N)r   r   OPTIONAL_RELATIONSHIPS)rp   rC   r   s     r0   rr   2GlueDict._lookup_semtype_option.<locals>.<genexpr>]  sT      "
A~~c"5)//19OO /HNN3&,,..As
   ,A'Ar   )r   r   r   r   r   r#   r   )r/   r   r   r   r   r   
best_matchrelset_options      `    r0   r   GlueDict._lookup_semtype_option\  s    ! "
**4<+>+>+@A"
 
	)+F( '  	)
 #J!$W!6&Z8%5!.J "7 7?!%J(F'	)s#   A <B*B*
B*"B*)B*c                     US   R                  5       nUS   R                  5       nUS:X  a  U[        ;   a
  [        U   /$ [        S   /$ US;   a  US   U/$ US   /$ )zR
Based on the node, return a list of plausible semtypes in order of
plausibility.
r   r   specr   )r   r   r   )r   SPEC_SEMTYPES)r/   r   r   r   s       r0   r   GlueDict.get_semtypesz  sw    
 5k!F|!!#&=}$%d+,,%i011$$K%%K= r3   c                 N   / nU R                  5       nU H  u  pU" U R                  X5      U	5      n
[        U5      (       d  X*l        OU [        U5      S-    3U
l        U R	                  U
R
                  X4UR                  5       5      U
l        UR                  U
5        M     U$ )Nr   )get_GlueFormula_factoryget_meaning_formular   r   initialize_labelsr,   rY   r   )r/   r   r   r   r   rZ   r   glueFormulaFactoryr'   r,   r   s              r0   r   ,GlueDict.get_glueformulas_from_semtype_entry  s     !99;#MG#D$<$<W$KTRB|$$!F3|#4q#8"9:,,RWWdgkkmTBG# $ r3   c                 J    UR                  SS5      nUR                  SU5      $ )z
:param generic: A meaning formula string containing the
    parameter "<word>"
:param word: The actual word to be replace "<word>"
.r   z<word>)replace)r/   genericr   s      r0   r   GlueDict.get_meaning_formula  s%     ||C$x..r3   c           	         [        U[        R                  5      (       ao  U R                  UR                  R                  5       X#U5      nUS   R                  5       (       a  [        R                  " U5      $ [        R                  " U5      $ [        R                  " U R                  UR                  X#U5      U R                  UR                  X#U5      5      $ )Nr   )r$   r   AtomicExpressionfind_label_namerI   r   isupperr   ConstantExpressionrR   r   r:   
consequent)r/   exprr   r   unique_indexrI   s         r0   r   GlueDict.initialize_labels  s    dK8899''		(94<XDAw  "55d;;"55d;;,,&&tU&&tU r3   c                     UR                  S5      nUS U nXS-   S  nUS:X  a"  U R                  XsR                  US      X45      $ U R                  UU R                  XbU5      UU5      $ ! [         a    U R                  U5      nUS:X  a  Us $ US:X  a  SU-  s $ US:X  a  S	U-  s $ US:X  a#  U R                  UR                  US      5      s $ US
:X  a  UR                  5        U 3s $ US:X  a#  U R                  U R                  SX#5      5      s $ US:X  a#  U R                  U R                  SX#5      5      s $ U R                  U R                  XU5      5      s $ f = f)Nr  r   superr   fvz%svr   z%srvarr   conjabconjb)rq   r  r   r   
ValueError	get_labelupper)	r/   rI   r   r   r  dot
before_dot	after_dotlbls	            r0   r  GlueDict.find_label_name  sx   !	P**S/CdsJ1WYIW$++~~d6l;X  ++&&zB 	   	P..&Cs{
s{"s{"~~hnnT&\&BCC))+|n55~~d&8&8$&QRR~~d&8&8$&QRR~~d&8&8X&NOO#	PsB   AA+ #A+ +#E%E%E%*'E%E%/'E%'E%!E%$E%c                 h    US   n/ SQUS-
     n[        U5      S-  nUS:  a  U[        U5      -   $ U$ )z
Pick an alphabetic character as identifier for an entity in the model.

:param value: where to index into the list of characters
:type value: int
r   )r  ghr   jklmnopqr   stur  wxyzr   r  r   drA   r      r   )intr%   )r/   r   valueletternums        r0   r  GlueDict.get_label  sM     Y
6 !)78 %jB7CH$$Mr3   c                    [         R                  " US   R                  5       5       Vs/ s HF  nUR                  U   S   R	                  5       UR	                  5       :X  d  M7  UR                  U   PMH     nn[        U5      S:X  a  [        SR                  US   U5      5      e[        U5      S:  a  [        SR                  US   U5      5      eUS   $ s  snf )zL
Lookup 'key'. There should be exactly one item in the associated relation.
r   r   r   z#'{}' doesn't contain a feature '{}'r   r   z&'{}' should only have one feature '{}')r   r   r   r   r   r   r   r   )r/   r   r   r   rC   r   s         r0   r   GlueDict.lookup_unique  s     **4<+>+>+@A
A~~c"5)//1SYY[@  HNN3A 	 
 t9>5<<T&\3O  Y]8??VcR  7N
s   6C$Cc                     [         $ rG   )r   r`   s    r0   r    GlueDict.get_GlueFormula_factory  s    r3   )r   r   rG   )T)NNF)r   r   r   r   r1   r   rx   r   r   r   r   r   r   r   r   r  r  r   r   r   rf   r3   r0   r   r      sR    
sj$"
4;<!$$/"PH)V*r3   r   c                   `    \ rS rSr SS jrSS jrS rS rS rS r	S	 r
S
 rS rS rS rSrg)Gluei  Nc                     X@l         X l        X0l        SSKJn  U" 5       U l        U(       a  Xl        g [        R                  R                  SSS5      U l        g )Nr   )Prover9grammarssample_grammarszglue.semtype)
r   remove_duplicates	depparserr   r>  proversemtype_fileospathru   )r/   rD  rA  rB  r   r>  s         r0   r1   Glue.__init__  sF     !2" i , "-~!Dr3   c           	          U(       a  U R                   R                  U5        g U R                   R                  [        R                  R                  [        R                  R                  SSS5      5      5        g )Nr?  r@  zglue_train.conll)	rB  traintrain_from_filer   r   findrE  rF  ru   )r/   	depgraphss     r0   train_depparserGlue.train_depparser/  sO    NN  +NN**		GGLL->@RSr3   c                 z    / nU R                  U5       H#  nUR                  U R                  U5      5        M%     U$ rG   )parse_to_compiledr   get_readings)r/   sentencereadingsagendas       r0   parse_to_meaningGlue.parse_to_meaning9  s8    ,,X6FOOD--f56 7r3   c                    / n[        U5      n[        5       n[        5       nU(       Ga  UR                  5       nUR                  R	                  5       n[        U[        R                  5      (       a  U H  n [        UR                  [        R                  5      (       a  UR                  R                  n	O[        R                  " 5       n	UR                  R                  X5        XH    HD  n
UR                  U
R                  -  (       a  M#   UR                  UR                  U
5      5        MF     M      XWR                     R                  U5        OU H  nXX    H  n [        UR                  [        R                  5      (       a  UR                  R                  n	O[        R                  " 5       n	UR                  X5        UR                  UR                  -  (       d#   UR                  UR                  U5      5        M  M     M      XG   R                  U5        U(       a  GM  U H:  nXL    H/  n[        UR                  5      U:X  d  M  U R'                  X5        M1     M<     U H:  nX\    H/  n[        UR                  5      U:X  d  M  U R'                  X5        M1     M<     U$ ! [        R                    a     GM  f = f! [        R"                   a     GMs  f = f! [$         a    U/XWR                  '    Nf = f! [        R                    a     GM  f = f! [        R"                   a     GM  f = f! [$         a	    U/XG'    GN-f = frG   )r   dictpopr,   r9   r$   r   rR   r8   bindingsBindingDictr:   unifyr-   r   r=   r7   UnificationExceptionr   _add_to_reading_list)r/   rT  rS  agenda_lengthatomics
nonatomicscur	glue_simpkeyrZ  atomic	nonatomicentryr   s                 r0   rQ  Glue.get_readings?  s   F&V
**,C))+I;44  #C%chh0Q0QRR'*xx'8'8H'2'>'>'@H!,,223A&-lF #fnn < <!)$*MM#++f2E$F '3 #"=334;;C@
 &C%/_	!) )0Q0Q    ,5>>+B+B+6+B+B+D%OOC: #i.?.? ?!)$*MM)2C2CC2H$I !@ &5 &&/&--c2c fj Enrzz?m3--b; %   E 'rzz?m3--b; (   U (3'R'R !)$(!)&;;    =8;uJ334=& (3'R'R !)$(!)*?? ! !   /*-G&/s   9BK J41K:K, %BL'* LM 4KKKKK)(K),LLL$L'#L$$L''M ?M MMc                 *   SnU R                   (       a9  U H3  n UR                  UR                  U R                  5      (       a  Sn  OM5     U(       a  UR                  UR                  5        g g ! [         a  n[        SU5         S nAMw  S nAff = f)NTFz2Error when checking logical equality of statements)rA  equivr'   rC  	Exceptionprintr   )r/   glueformulareading_listadd_readingreadingrA   s         r0   r^  Glue._add_to_reading_list  s    !!'S}}[%8%8$++FF&+ G (  3 34  ! S NPQRR	Ss   -A11
B;BBc                     U R                  U5       Vs/ s H  o R                  U5      PM     nnU Vs/ s H  o@R                  U5      PM     sn$ s  snf s  snf rG   )	dep_parsedepgraph_to_gluegfl_to_compiled)r/   rR  dggflsgfls        r0   rP  Glue.parse_to_compiled  sQ    48NN84LM4Lb%%b)4LM59:Tc$$S)T:: N:s
   AAc                     U R                   c  SSKJn  U" U R                  5       S9U l         U R                   R                  (       d  U R                  5         U R                   R                  XR                  S9$ )z
Return a dependency graph for the sentence.

:param sentence: the sentence to be parsed
:type sentence: list(str)
:rtype: DependencyGraph
r   
MaltParsertagger)r   )rB  
nltk.parser|  get_pos_tagger_trainedrM  r+   r   )r/   rR  r|  s      r0   rs  Glue.dep_parse  s[     >>!-'t/B/B/DEDN~~&&  "~~##Hll#CCr3   c                 @    U R                  5       R                  U5      $ rG   )get_glue_dictr   )r/   r   s     r0   rt  Glue.depgraph_to_glue  s    !!#77AAr3   c                 ,    [        U R                  5      $ rG   )r   rD  r`   s    r0   r  Glue.get_glue_dict  s    ))**r3   c                     [        5       n/ nU H#  nUR                  UR                  U5      5        M%     U R                  (       a  [	        S5        U H  n[	        U5        M     U$ )NzCompiled Glue Premises:)r   r   r]   r   rl  )r/   rx  index_counterreturn_listr   cgfs         r0   ru  Glue.gfl_to_compiled  sZ    	Brzz-89  <<+,"c
 # r3   c                     SSK Jn  [        / SQ5      nUR                  SS9n[	        X2S9n[        X4S9n[        X5S9n[        SS/US9nU$ )	Nr   )brown)	)z^-?[0-9]+(\.[0-9]+)?$CD)z(The|the|A|a|An|an)$AT)z.*able$JJ)z.*ness$NN)z.*ly$RB)z.*s$NNS)z.*ing$VBG)z.*ed$VBD)z.*r  news)
categories)backoff)z(A|a|An|an)$r   )z(Every|every|All|all)$r   )nltk.corpusr  r   tagged_sentsr   r   r   )r/   r  regexp_taggerbrown_trainunigram_taggerbigram_taggertrigram_taggermain_taggers           r0   r  Glue.get_pos_tagger  sg    %$

 ((F(;&{J$[I&{J #*,UV"

 r3   )rB  rC  rA  rD  r   NFNFrG   )r   r   r   r   r1   rM  rU  rQ  r^  rP  rs  rt  r  ru  r  r   rf   r3   r0   r<  r<    s@    RW$BH5";D$B+r3   r<  c                   *    \ rS rSrSS jrS rS rSrg)DrtGlueFormulai  Nc                 0   U(       d
  [        5       n[        U[        5      (       a%  [        R                  R                  U5      U l        OC[        U[        R                  5      (       a  Xl        O[        SU< SUR                  < 35      e[        U[        5      (       a*  [        R                  " 5       R                  U5      U l        OC[        U[        R                  5      (       a  X l        O[        SU< SUR                  < 35      eX0l        g r!   )r#   r$   r%   r   DrtExpressionr&   r'   r(   r)   r   r*   r+   r,   r   r-   r.   s       r0   r1   DrtGlueFormula.__init__  s    eGgs##,,77@DL!2!233"LG--/ 
 dC  #557==dCDIk4455I) 
 r3   c                 .    [         R                  " U5      $ rG   )r   DrtVariableExpressionrH   s     r0   rJ   &DrtGlueFormula.make_VariableExpression  s    ((..r3   c                 .    [         R                  " X5      $ rG   )r   DrtLambdaExpressionrM   s      r0   r<   $DrtGlueFormula.make_LambdaExpression  s    &&x66r3   r~   rG   )r   r   r   r   r1   rJ   r<   r   rf   r3   r0   r  r    s    4/7r3   r  c                       \ rS rSrS rSrg)DrtGlueDicti  c                     [         $ rG   )r  r`   s    r0   r   #DrtGlueDict.get_GlueFormula_factory  s    r3   rf   N)r   r   r   r   r   r   rf   r3   r0   r  r    s    r3   r  c                   &    \ rS rSr SS jrS rSrg)DrtGluei  Nc                     U(       d!  [         R                  R                  SSS5      n[        R	                  XX#U5        g )Nr?  r@  zdrt_glue.semtype)rE  rF  ru   r<  r1   )r/   rD  rA  rB  r   s        r0   r1   DrtGlue.__init__  s5     77<<-/AL 	d*;Pr3   c                 ,    [        U R                  5      $ rG   )r  rD  r`   s    r0   r  DrtGlue.get_glue_dict  s    4,,--r3   rf   r  )r   r   r   r   r1   r  r   rf   r3   r0   r  r    s    RWQ.r3   r  c                 `   SSK Jn  / SQn[        S5        [        / SQ5      nU" US9n[	        USS9n[        U5       Hm  u  pgX`:X  d  U S	:X  d  M  [        S
U SU 35        UR                  UR                  5       5       H  n[        UR                  5       5        M     [        S5        Mo     g )Nr   r{  )zDavid sees MaryzDavid eats a sandwichzevery man chases a dogzevery man believes a dog sleepszJohn gives David a sandwichzJohn chases himselfz"============== DEMO ==============))z^(David|Mary|John)$NNP)zN^(sees|eats|chases|believes|gives|sleeps|chases|persuades|tries|seems|leaves)$VB)z!^(go|order|vanish|find|approach)$r  )z^(a)$r   )z	^(every)$r   )z.^(sandwich|man|dog|pizza|unicorn|cat|senator)$r  )z^(big|gray|former)$r  )z^(him|himself)$PRPr}  F)rB  r   r6   z[[[Example z]]]  r   )	r  r|  rl  r   r<  r   rU  r   r9   )	show_exampler|  examplesr~  rB  r,   r   rR  rp  s	            r0   demor    s    %H$ 

./	
F  &)I)U3D * 2Ks%z23001ABg&&() C"I +r3   __main__)r6   )rE  	itertoolsr   r   nltk.internalsr   nltk.semr   r   nltk.sem.logicr   r   r	   r
   r   nltk.tagr   r   r   r   r   r   r   rX  r   r<  r  r  r  r  r   rf   r3   r0   <module>r     s    
   " %  N M 


 3 r rj@t @F| |~7[ 7D( 
.d ./d zF r3   