
    gr                     ,   d dl Z d dlmZ d dlZd dlmZ d dlmZmZ d dl	m
Z
mZmZmZmZ d dlmZmZmZmZ dddd	d
ddZg dZ G d d      Z G d de      Z G d d      Z G d de      Z G d de      Z G d de      ZddZedk(  r e        yy)    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                   X    e Zd ZddZd Zd Zd Zd ZddZd Z	d	 Z
d
 Zd Zd Zd Zy)GlueFormulaNc                    |s
t               }t        |t              rt        j                  |      | _        n3t        |t              r|| _        nt        d|d|j                        t        |t              r0t        j                         j                  |      | _        || _        y t        |t        j                        r|| _        || _        y t        d|d|j                        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       B/var/www/openai/venv/lib/python3.12/site-packages/nltk/sem/glue.py__init__zGlueFormula.__init__%   s    eGgs#%009DL,"DLG--/ 
 dC #557==dCDI  k445DI  )     c                    | j                   |j                   z  rt        j                  d|  d| d      | j                   |j                   z  }	 t        j                  | j                  |j                  |j                         }|j                  }|rW| j                  j                         j                  j                  ddd   D ]   }| j                  t        d|z        |      }" | j                  j                  |      }| j                  |||      S # t        j                  $ r>}t        j                  d| j                          d|j                          d      |d}~ww xY w)zyself = (\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           r/   r;   zGlueFormula.applyto?   sN   
 <<#++%==D6u,IJ  "\\CKK7N	%;;		388S[[K "%yy))+66CC" *.)C)CUS[)+A*& --.DE~~nk>JJ :: 	==DMMO$N3<<>2B!D	s   5D E)+9E$$E)c                     t        |      S N)r   r.   names     r/   make_VariableExpressionz#GlueFormula.make_VariableExpression`   s    !$''r1   c                     t        ||      S rD   )r	   r.   variableterms      r/   r:   z!GlueFormula.make_LambdaExpressionc   s    $//r1   c                 .   t        |t              sJ t        |j                  t              sJ | j	                  | j                  |j                  j                  | j                        t        j                  |j                  | j                              S rD   )
r#   r   r&   r   r(   r:   rJ   r   ImpExpressionr+   r.   others     r/   lambda_abstractzGlueFormula.lambda_abstractf   sn    %---%--)CDDD~~&&u}}'='=t||L%%ejj$))<
 	
r1   c                     |s
t               }| j                  j                         j                  || j                        \  }}|| j	                  | j
                  ||j                         h      gz   S )z)From Iddo Lev's PhD Dissertation p108-109)r   r+   r7   compile_posr(   r&   get)r.   countercompiled_glue	new_formss       r/   compilezGlueFormula.compilen   sg    iG%)YY%7%7%9%E%ET^^&
"	 NN4<<H
 
 	
r1   c                     | j                  | j                  j                         | j                  j                         | j                        S rD   )r(   r&   r7   r+   r,   r.   s    r/   r7   zGlueFormula.simplifyy   s8    ~~LL!!#TYY%7%7%94<<
 	
r1   c                     | j                   |j                   k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S rD   )r(   r&   r+   rN   s     r/   __eq__zGlueFormula.__eq__~   sA    NNeoo- (-(		UZZ'	
r1   c                     | |k(   S rD    rN   s     r/   __ne__zGlueFormula.__ne__   s    5=  r1   c                 0    t        |       t        |      k  S rD   r$   rN   s     r/   __lt__zGlueFormula.__lt__   s    4y3u:%%r1   c                     t        | j                  t              sJ | j                   d| j                   }| j                  r4|ddj                  d t        | j                        D              z   dz   z  }|S )N : z : {r!   c              3   2   K   | ]  }t        |        y wrD   r`   ).0indexs     r/   	<genexpr>z&GlueFormula.__str__.<locals>.<genexpr>   s     "P;O%3u:;Os   })r#   r,   r"   r&   r+   joinsorted)r.   accums     r/   __str__zGlueFormula.__str__   sl    $,,,,,<<.DII;/<<"P6$,,;O"PPPSVVE r1   c                     d| z  S )N%sr]   rY   s    r/   __repr__zGlueFormula.__repr__   s    d{r1   rD   )__name__
__module____qualname__r0   r;   rG   r:   rP   rW   r7   r[   r^   ra   rl   ro   r]   r1   r/   r   r   $   s@    4KB(0
	



!&r1   r   c                   l    e Zd ZddZddZd ZddZd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zy)GlueDictNc                 @    || _         || _        | j                          y rD   )filenamefile_encoding	read_file)r.   rv   encodings      r/   r0   zGlueDict.__init__   s     %r1   c                    |r| j                          	 t        j                  j                  | j                  d| j
                        }|j                         }|D ]a  }|j                         }t        |      s |d   dk(  r)|j                  dd      }g }d}d}	d}
d }t        |      dkD  rt        |d         D ]y  \  }}|d	k(  r|dk(  r|dz   }	|dz  }|d
k(  r2|dz  }|dk(  s+|d   |	|
 }|d   |
dz   | }|j                  ||g       R|dk(  r	|dk(  s]|}
`|dk(  sf|dk7  rt        d|z          n t        |      dkD  rb|d   j                  d      dz   }|d   j                  d      }||k(  rt               }n't        d |d   || j                  d      D              }	 |d   j                  d	      }|d   j                  d
      }|d   d | j                         }|d   |dz   | }|| vri | |<   |{|rQ| |   D ]G  }|| |   vrg | |   |<   | |   |   }| |   |   j!                  |       | |   |   j!                  |       I d | |   vrg | |   d <   | |   d    j!                  |       || |   vrg | |   |<   |r| |   |   j!                  | |   |          | |   |   j!                  |       d y # t        $ rU}	 t        j                  j                  d| j                  z   d| j
                        }n# t        $ r |w xY wY d }~d }~ww xY w#  |d   j                         }d }Y JxY w)Ntext)formatry   zfile:r   #rc         (),z&Formula syntax is incorrect for entry []c              3   <   K   | ]  }|j                           y wrD   )strip)re   rs     r/   rg   z%GlueDict.read_file.<locals>.<genexpr>   s      .+Qa	+Qs   )clearnltkdataloadrv   rw   LookupError
splitlinesr   lensplit	enumerateappendr'   rf   	frozensetextend)r.   empty_firstcontentsr?   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                           r/   rx   zGlueDict.read_file   s   JJL	yy~~ft7I7I & H ##%D::<Dt9Aw#~JJqE MKKK M5zA~%eAh/DAqCx&!+*+a%K#q(c#q(&!++08 +K,L ).aq1(EI)00!-y 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& 	s6   6K *A	L#	L 9LLLLL #L=c                     d}| D ]r  }d|z  }| |   D ]c  }d}| |   |   D ]T  }|dk(  r	||dz   z  }n|dt        |      dz   z  z  }|d|z  z  }|r|t        | |   |         k(  r|d|z  z  }|dz  }|dz  }V e t |S )	N rn   r   z:  r~   z : %s
)r   )r.   rk   posstr_posrelsetr   gfs          r/   rl   zGlueDict.__str__  s    CSjGs)s)F+BAv4/Gq(8!99TBY&E!s49V+<'="=6!11TMEFA , $  r1   c           	         |l|j                   d   }t        t        j                  |d   j	                                     }|j                   |d      }| j                  ||t               |      S | j                  |||      }t        j                  |d   j	                               D ]4  }	|j                   |	   }
|j                  | j                  ||
||             6 |S )Nr   deps)	nodeslistr   from_iterablevaluesto_glueformula_listr   lookupr   )r.   depgraphnoderT   verbosetopdepListrootglueformulasdep_idxrA   s              r/   r   zGlueDict.to_glueformula_list&  s    <..#C5..s6{/A/A/CDEG>>'!*-D++HdGIwOO{{47;**4<+>+>+@AG..)C((3I B
 r1   c           	          | j                  |      }d }|D ]  }|| v s| |   } n |g S | j                  ||       | j                  |||      }t        |      st	        d|d   d|d   d|d   d      | j                  ||d   |||      S )Nz,There is no GlueDict entry for sem type of 'wordz' with tag 'tagz', and rel 'relr3   )get_semtypesadd_missing_dependencies_lookup_semtype_optionr   KeyError#get_glueformulas_from_semtype_entry)r.   r   r   rT   semtype_namessemtyperF   r   s           r/   r   zGlueDict.lookup7  s    ))$/!Dt|t* " ?I%%dH5,,WdHE6{15ftE{DQVKY 
 77DL$'
 	
r1   c                     |d   j                         }|dk(  rZ|j                  |d      }| j                  d||      }|d   }|d   j                  |g        |d   |   j	                  |d          y y )Nr   mainheadsubjr   address)lowerr   lookup_unique
setdefaultr   )r.   r   r   r   headnoder   relations          r/   r   z!GlueDict.add_missing_dependenciesQ  s~    5k!&=~~d6l3H%%fhADE{HL##Hb1L"))$y/: r1   c                 @   t        fdt        j                  |d   j                               D              }	 ||   }|S # t        $ rR t               }t        |      d hz
  D ]"  }t        |      t        |      kD  s||k  s!|}$ |s	d |v rd }nY y ||   }Y |S w xY w)Nc              3      K   | ]J  }j                   |   d    j                         t        vr"j                   |   d    j                          L yw)r   N)r   r   OPTIONAL_RELATIONSHIPS)re   rA   r   s     r/   rg   z2GlueDict._lookup_semtype_option.<locals>.<genexpr>]  sP      "
A~~c"5)//19OO NN3&,,.As   AAr   )r   r   r   r   r   r"   r   )r.   r   r   r   r   r   
best_matchrelset_options      `    r/   r   zGlueDict._lookup_semtype_option\  s    ! "
**4<+>+>+@A"
 
	)]+F( '  	)
 #J!$W!6&Z8%5!.J "7 7?!%JZ(F'	)s#   A <B?BBBBc                     |d   j                         }|d   j                         }|dk(  r|t        v r
t        |   gS t        d   gS |dv r|d   |gS |d   gS )zj
        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       r/   r   zGlueDict.get_semtypesz  sw    
 5k!F|!!#&=}$%d+,,%i011$$K%%K= r1   c                 H   g }| j                         }|D ]  \  }}	 || j                  ||      |	      }
t        |      s||
_        n| t        |      dz    |
_        | j	                  |
j
                  |||j                               |
_        |j                  |
        |S )Nr   )get_GlueFormula_factoryget_meaning_formular   r   initialize_labelsr+   rS   r   )r.   r   r   r   r   rT   r   glueFormulaFactoryr&   r+   r   s              r/   r   z,GlueDict.get_glueformulas_from_semtype_entry  s     !99;#MGT#D$<$<Wd$KTRB|$!F3|#4q#8"9:,,RWWdHgkkmTBG# $ r1   c                 J    |j                  dd      }|j                  d|      S )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      r/   r   zGlueDict.get_meaning_formula  s%     ||C$x..r1   c           	         t        |t        j                        ri| j                  |j                  j                         |||      }|d   j                         rt        j                  |      S t        j                  |      S t        j                  | j                  |j                  |||      | j                  |j                  |||            S )Nr   )r#   r   AtomicExpressionfind_label_namerF   r   isupperr   ConstantExpressionrM   r   r8   
consequent)r.   exprr   r   unique_indexrF   s         r/   r   zGlueDict.initialize_labels  s    dK889''		(94<XDAw "55d;;"55d;;,,&&thU&&thU r1   c                    	 |j                  d      }|d | }||dz   d  }|dk(  r$| j                  ||j                  |d      ||      S | j                  || j                  |||      ||      S # t        $ r | j                  |      }|dk(  r|cY S |dk(  rd|z  cY S |dk(  rd	|z  cY S |dk(  r#| j                  |j                  |d            cY S |d
k(  r|j                          | cY S |dk(  r$| j                  | j                  d||            cY S |dk(  r$| j                  | j                  d||            cY S | j                  | j                  |||            cY S w xY w)Nr   r   superr   fvz%svr   z%srvarr   conjabconjb)rf   r   r   r   
ValueError	get_labelupper)	r.   rF   r   r   r   dot
before_dot	after_dotlbls	            r/   r   zGlueDict.find_label_name  s   !	P**S/CdsJS1WYIW$++x~~d6l;X|  ++&&z4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tX&NOO#	PsB   AA. 	$A. .!E#
E#
E#)&E#E#,'E#'E#>"E#"E#c                 f    |d   }g d|dz
     }t        |      dz  }|dkD  r|t        |      z   S |S )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   dr?   r      r   )intr$   )r.   r   valueletternums        r/   r   zGlueDict.get_label  sM     Y
6 !)78 %jB7CH$$Mr1   c                    t        j                  |d   j                               D cg c]B  }|j                  |   d   j	                         |j	                         k(  r|j                  |   D }}t        |      dk(  rt        dj                  |d   |            t        |      dkD  rt        dj                  |d   |            |d   S c c}w )z\
        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   rA   r   s         r/   r   zGlueDict.lookup_unique  s     **4<+>+>+@A
A~~c"5)//1SYY[@ NN3A 	 
 t9>5<<T&\3O  Y]8??VcR  7N
s   ACc                     t         S rD   )r   rY   s    r/   r   z GlueDict.get_GlueFormula_factory  s    r1   rD   )T)NNF)rp   rq   rr   r0   rx   rl   r   r   r   r   r   r   r   r   r   r   r   r   r]   r1   r/   rt   rt      sR    
sj$"
4;<!$$/"PH)V*r1   rt   c                   T    e Zd Z	 ddZddZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zy)GlueNc                     || _         || _        || _        ddlm}  |       | _        |r|| _        y t        j                  j                  ddd      | _        y )Nr   )Prover9grammarssample_grammarszglue.semtype)
r   remove_duplicates	depparserr   r  proversemtype_fileospathri   )r.   r!  r  r  r   r  s         r/   r0   zGlue.__init__  sN     !2" i ,D "-~!Dr1   c           	          |r| j                   j                  |       y | j                   j                  t        j                  j                  t        j                  j                  ddd                   y )Nr  r  zglue_train.conll)	r  traintrain_from_filer   r   findr"  r#  ri   )r.   	depgraphss     r/   train_depparserzGlue.train_depparser/  sO    NN  +NN**		GGLL->@RSr1   c                 v    g }| j                  |      D ]"  }|j                  | j                  |             $ |S rD   )parse_to_compiledr   get_readings)r.   sentencereadingsagendas       r/   parse_to_meaningzGlue.parse_to_meaning9  s8    ,,X6FOOD--f56 7r1   c                 :   g }t        |      }t               }t               }|r|j                         }|j                  j	                         }t        |t        j                        r|D ]  }	 t        |j                  t        j                        r|j                  j                  }	nt        j                         }	|j                  j                  ||	       ||   D ]=  }
|j                  |
j                  z  r	 |j                  |j                  |
             ?  	 ||j                     j                  |       n|D ]  }||   D ]  }	 t        |j                  t        j                        r|j                  j                  }	nt        j                         }	|j                  ||	       |j                  |j                  z  s!	 |j                  |j                  |               	 ||   j                  |       |r|D ]7  }||   D ]-  }t        |j                        |k(  s| j'                  ||       / 9 |D ]7  }||   D ]-  }t        |j                        |k(  s| j'                  ||       / 9 |S # t        j                   $ r Y w xY w# t        j"                  $ r Y Fw xY w# t$        $ r |g||j                  <   Y w xY w# t        j                   $ r Y w xY w# t        j"                  $ r Y w xY w# t$        $ r
 |g||<   Y w xY wrD   )r   dictpopr+   r7   r#   r   rM   r6   bindingsBindingDictr8   unifyr,   r   r;   r5   UnificationExceptionr   _add_to_reading_list)r.   r/  r.  agenda_lengthatomics
nonatomicscur	glue_simpkeyr4  atomic	nonatomicentryr   s                 r/   r,  zGlue.get_readings?  s   F&V
**,C))+I;44 #C%chh0Q0QR'*xx'8'8H'2'>'>'@H!,,223A&-clF #fnn <!)$*MM#++f2E$F '3 #"=y334;;C@
 &C%/_	!) )0Q0Q  ,5>>+B+B+6+B+B+D%OOC: #i.?.? ?!)$*MM)2C2CC2H$I &5 &&/I&--c2c j Eenrzz?m3--b(; %   E 'rzz?m3--b(; (   U (3'R'R !)$(!)&;;    =8;uJy334=& (3'R'R !)$(!)*?? ! !   /*-GI&/s   /BJ= JJ"J5 A:K-
 K/L JJJJJ21J25KKK*'K-)K**K--LLLLc                    d}| j                   r2|D ]-  }	 |j                  |j                  | j                        rd} n/ |r|j                  |j                         y y # t        $ r}t        d|       Y d }~id }~ww xY w)NTFz2Error when checking logical equality of statements)r  equivr&   r   	Exceptionprintr   )r.   glueformulareading_listadd_readingreadingr?   s         r/   r8  zGlue._add_to_reading_list  s    !!'S}}[%8%8$++F&+ G (  3 34  ! S NPQRR	Ss   (A  	A?)A::A?c                     | j                  |      D cg c]  }| j                  |       }}|D cg c]  }| j                  |       c}S c c}w c c}w rD   )	dep_parsedepgraph_to_gluegfl_to_compiled)r.   r-  dggflsgfls        r/   r+  zGlue.parse_to_compiled  sU    48NN84LM4Lb%%b)4LM59:Tc$$S)T:: N:s
   AAc                     | j                   "ddlm}  || j                               | _         | j                   j                  s| j                          | j                   j                  || j                        S )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   )r  
nltk.parserS  get_pos_tagger_trainedr)  r*   r   )r.   r-  rS  s      r/   rK  zGlue.dep_parse  s]     >>!-'t/B/B/DEDN~~&&  "~~##Hdll#CCr1   c                 @    | j                         j                  |      S rD   )get_glue_dictr   )r.   r   s     r/   rL  zGlue.depgraph_to_glue  s    !!#77AAr1   c                 ,    t        | j                        S rD   )rt   r!  rY   s    r/   rZ  zGlue.get_glue_dict  s    ))**r1   c                     t               }g }|D ]"  }|j                  |j                  |             $ | j                  rt	        d       |D ]  }t	        |        |S )NzCompiled Glue Premises:)r   r   rW   r   rE  )r.   rP  index_counterreturn_listr   cgfs         r/   rM  zGlue.gfl_to_compiled  sZ    	Brzz-89  <<+,"c
 # r1   c                     ddl m} t        g d      }|j                  d      }t	        ||      }t        ||      }t        ||      }t        ddg|      }|S )	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.*re  news)
categories)backoff)z(A|a|An|an)$r   )z(Every|every|All|all)$r   )nltk.corpusra  r   tagged_sentsr   r   r   )r.   ra  regexp_taggerbrown_trainunigram_taggerbigram_taggertrigram_taggermain_taggers           r/   rW  zGlue.get_pos_tagger  sm    %$

 ((F(;&{MJ$[.I&{MJ #*,UV"

 r1   NFNFrD   )rp   rq   rr   r0   r)  r0  r,  r8  r+  rK  rL  rZ  rM  rW  r]   r1   r/   r  r    s@    RW$BH5";D$B+r1   r  c                        e Zd ZddZd Zd Zy)DrtGlueFormulaNc                    |s
t               }t        |t              r%t        j                  j                  |      | _        n=t        |t        j                        r|| _        nt        d|d|j                        t        |t              r0t        j                         j                  |      | _        || _        y t        |t        j                        r|| _        || _        y t        d|d|j                        r    )r"   r#   r$   r   DrtExpressionr%   r&   r'   r(   r   r)   r*   r+   r   r,   r-   s       r/   r0   zDrtGlueFormula.__init__  s    eGgs#,,77@DL!2!23"DLG--/ 
 dC #557==dCDI  k445DI  ) r1   c                 ,    t        j                  |      S rD   )r   DrtVariableExpressionrE   s     r/   rG   z&DrtGlueFormula.make_VariableExpression  s    ((..r1   c                 .    t        j                  ||      S rD   )r   DrtLambdaExpressionrI   s      r/   r:   z$DrtGlueFormula.make_LambdaExpression  s    &&x66r1   rD   )rp   rq   rr   r0   rG   r:   r]   r1   r/   rw  rw    s    4/7r1   rw  c                       e Zd Zd Zy)DrtGlueDictc                     t         S rD   )rw  rY   s    r/   r   z#DrtGlueDict.get_GlueFormula_factory  s    r1   N)rp   rq   rr   r   r]   r1   r/   r  r    s    r1   r  c                       e Zd Z	 ddZd Zy)DrtGlueNc                 |    |s!t         j                  j                  ddd      }t        j	                  | ||||       y )Nr  r  zdrt_glue.semtype)r"  r#  ri   r  r0   )r.   r!  r  r  r   s        r/   r0   zDrtGlue.__init__  s9     77<<-/AL 	dL*;YPr1   c                 ,    t        | j                        S rD   )r  r!  rY   s    r/   rZ  zDrtGlue.get_glue_dict  s    4,,--r1   ru  )rp   rq   rr   r0   rZ  r]   r1   r/   r  r    s    RWQ.r1   r  c                 b   ddl m} g d}t        d       t        g d      } ||      }t	        |d      }t        |      D ]i  \  }}|| k(  s| d	k(  st        d
| d|        |j                  |j                               D ]  }t        |j                                 t        d       k y )Nr   rR  )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)$re  )z^(big|gray|former)$rd  )z^(him|himself)$PRPrT  F)r  r   r4   z[[[Example z]]]  r   )	rV  rS  rE  r   r  r   r0  r   r7   )	show_examplerS  examplesrU  r  r+   r   r-  rI  s	            r/   demor    s    %H$ 

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