
    Ngr                     \   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             dS dS )    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                   Z    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dS )GlueFormulaNc                    |st                      }t          |t                    rt          j        |          | _        n7t          |t                    r|| _        nt          d|d|j                  t          |t                    r,t          j	                    
                    |          | _        n<t          |t          j                  r|| _        nt          d|d|j                  || _        d S 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       I/var/www/html/ai-engine/env/lib/python3.11/site-packages/nltk/sem/glue.py__init__zGlueFormula.__init__%   s    	eeGgs## 	%099DLL,, 	"DLL,77G--/  
 dC   	#577==dCCDIIk455 	DII,44)  
     c                    | j         |j         z  rt          j        d|  d| d          | j         |j         z  }	 t          j        | j        |j        |j                   }nW# t          j        $ rE}t          j        d|                                  d|                                 d          |d}~ww xY w|j        }|rU| j                                        j        j        ddd         D ](}| 	                    t          d|z            |          })| j                            |          }|                     |||          S )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?   sv   
 <#+% 	8=JDJJJJJ   "\CK7N	%;	38S[ KK : 	 	 	=DDMMOODD3<<>>DDD 	
 "% 	y))++6C"   *.)C)CUS[))+A* *&& --.DEE~~nk>JJJs   %A! !B50A B00B5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                  t          j        |j	        | j	                            S rD   )
r#   r   r&   r   r(   r:   rJ   r   ImpExpressionr+   r.   others     r/   lambda_abstractzGlueFormula.lambda_abstractf   su    %-----%-)CDDDDD~~&&u}'=t|LL%ej$)<<
 
 	
r1   c                     |st                      }| 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   su     	 iiG%)Y%7%7%9%9%E%ET^&
 &
"	 NN4<HH
 
 	
r1   c                     |                      | j                                        | j                                        | j                  S rD   )r(   r&   r7   r+   r,   r.   s    r/   r7   zGlueFormula.simplifyy   s=    ~~L!!##TY%7%7%9%94<
 
 	
r1   c                 b    | j         |j         k    o| j        |j        k    o| j        |j        k    S rD   )r(   r&   r+   rN   s     r/   __eq__zGlueFormula.__eq__~   s5    Neo- (-(	UZ'	
r1   c                     | |k     S rD    rN   s     r/   __ne__zGlueFormula.__ne__   s    5=  r1   c                 B    t          |           t          |          k     S rD   r$   rN   s     r/   __lt__zGlueFormula.__lt__   s    4yy3u::%%r1   c                     t          | j        t                    sJ | j         d| j         }| j        r:|dd                    d t          | j                  D                       z   dz   z  }|S )N : z : {r!   c              3   4   K   | ]}t          |          V  d S rD   r`   ).0indexs     r/   	<genexpr>z&GlueFormula.__str__.<locals>.<genexpr>   s(      "P"P%3u::"P"P"P"P"P"Pr1   })r#   r,   r"   r&   r+   joinsorted)r.   accums     r/   __str__zGlueFormula.__str__   s    $,,,,,,<//DI//< 	"P"P6$,;O;O"P"P"P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 K KB( ( (0 0 0
 
 
	
 	
 	
 	

 
 


 
 
! ! !& & &      r1   r   c                   n    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dS )GlueDictNc                 J    || _         || _        |                                  d S rD   )filenamefile_encoding	read_file)r.   rv   encodings      r/   r0   zGlueDict.__init__   s'     %r1   Tc                 $   |r|                                   	 t          j                            | j        d| j                  }nX# t          $ rK}	 t          j                            d| j        z   d| j                  }n# t          $ r |w xY wY d }~nd }~ww xY w|                                }|D ][}|                                }t          |          s'|d         dk    r4|
                    dd          }g }d}d}	d}
d }t          |          dk    rt          |d                   D ]\  }}|d	k    r|dk    r|dz   }	|dz  }|d
k    rF|dz  }|dk    r:|d         |	|
         }|d         |
dz   |         }|                    ||g           h|dk    r	|dk    r|}
w|dk    r|dk    rt          d|z              nt          |          dk    r|d                             d          dz   }|d                             d          }||k    rt                      }n:t          d |d         ||         
                    d          D                       }	 |d                             d	          }|d                             d
          }|d         d |                                         }|d         |dz   |         }n##  |d                                         }d }Y nxY w|| vri | |<   ||rr| |         D ]g}|| |         vrg | |         |<   | |         |         }| |         |                             |           | |         |                             |           hd | |         vrg | |         d <   | |         d                              |           || |         vrg | |         |<   |r-| |         |                             | |         |                    | |         |                             |           ]d S )Ntext)formatry   zfile:r   #rc         (),z&Formula syntax is incorrect for entry []c              3   >   K   | ]}|                                 V  d S rD   )strip)re   rs     r/   rg   z%GlueDict.read_file.<locals>.<genexpr>   s;       . .&'		. . . . . .r1   )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    	JJLLL	y~~ft7I &  HH  	 	 	9>>dm+FTEW *       	 ##%% a	 a	D::<<Dt99 Aw#~~JJq E MKKK M5zzA~~%eAh//  DAqCxx&!++*+a%K#q(c#q(&!+++08 +K 7,L ).aq11D(EI)00!-y 9   c'1,,*+Kc'1,,". H4 O# #   " 5zzA~~!!HNN3//!3	(..--''$-KKMM$- . .+08Ig4E+F+L+LS+Q+Q. . . % %M!$)!HNN3$7$7!"'(.."5"5Ah1 11288::!!H%6%:_%LM		!Ahnn&& 			$S	 %   $Y  tCy00.0DIdO#It4S	$..t444S	$..)    49,,*,S	$IdO**%    !S	11/1DIm, TIm,33DOM4RSSSS	-(//!   a	 a	s6   ,A 
B/B ?B BBB#A+KK/c                    d}| D ]}d|z  }| |         D ]w}d}| |         |         D ]d}|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  }ex|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Avv4/Gq(8!99TBY&E 2!s49V+<'='="="=6!11TMEFAA	 r1   Fc           	          |}|j         d         }t          t          j        |d                                                             }|j         |d                  }|                     ||t                      |          S |                     |||          }t          j        |d                                                   D ]:}	|j         |	         }
|                    |                     ||
||                     ;|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/CDDEEG>'!*-D++HdGIIwOOO{{47;;*4<+>+>+@+@AA 	 	G.)C((3II    r1   c           	      j   |                      |          }d }|D ]}|| v r
| |         } n|g S |                     ||           |                     |||          }t          |          s+t	          d|d         d|d         d|d         d          |                     ||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55,,WdHEE6{{ 	(15ftE{{{DQVKKKY  
 77DL$'
 
 	
r1   c                 4   |d                                          }|dk    rw|j        |d                  }|                     d||          }|d         }|d                             |g            |d         |                             |d                    d S d S )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AADE{HL##Hb111L"))$y/::::: =r1   c                    t          fdt          j        |d                                                   D                       }	 ||         }np# t          $ rc t                      }t          |          d hz
  D ]*}t          |          t          |          k    r||k     r|}+|s
d |v rd }nY d S ||         }Y nw xY w|S )Nc              3      K   | ]U}j         |         d                                          t          v.j         |         d                                          V  VdS )r   N)r   r   OPTIONAL_RELATIONSHIPS)re   rA   r   s     r/   rg   z2GlueDict._lookup_semtype_option.<locals>.<genexpr>]  sk       "
 "
~c"5)//119OOO N3&,,..OOOO"
 "
r1   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A"
 "
 "
 
 
	)]+FF 	) 	) 	)
 #J!$W!6 / /&&Z88%55!.J  7??!%JJ44Z(FFF#	)& s   A AB>3B>=B>c                     |d                                          }|d                                          }|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  s    
 5k!!F|!!##&==}$$%d+,,%i011$$$K%%K= r1   c                 x   g }|                                  }|D ]\  }}	 ||                     ||          |	          }
t          |          s||
_        n| t          |          dz    |
_        |                     |
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$K$KTRRB|$$ ;!:3|#4#4q#8::,,RWdHgkkmmTTBG####r1   c                 Z    |                     dd          }|                     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                  rq|                     |j                                        |||          }|d                                         rt          j        |          S t          j        |          S t          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99 
	''	(9(94<XXDAw   <"5d;;;"5d;;;,&&thUU&&thUU  r1   c                 `   	 |                     d          }|d |         }||dz   d          }|dk    r)|                     ||j        |d                  ||          S |                     ||                     |||          ||          S # t          $ r |                     |          }|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        |d                            cY S |d
k    r|                                 | cY S |dk    r,|                     |                     d||                    cY S |dk    r,|                     |                     d||                    cY S |                     |                     |||                    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dsdJS1WYYIW$$++x~d6l;X|   ++&&z4BB 	    	P 	P 	P..&&Cs{{


s{"""s{"""~~hnT&\&BCCCCC))++5|55555~~d&8&8$&Q&QRRRRR~~d&8&8$&Q&QRRRRR~~d&8&8tX&N&NOOOOO#	PsB   AB
 ,B
 
(F-4F-F-,F-<F-0F-0F- *F-,F-c                     |d         }g d|dz
           }t          |          dz  }|dk    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  s]     Y
 
 
6 !)78 %jjB77CHH$$Mr1   c                 x   fdt          j        |d                                                   D             }t          |          dk    r)t	          d                    |d                             t          |          dk    r)t	          d                    |d                             |d         S )z\
        Lookup 'key'. There should be exactly one item in the associated relation.
        c                     g | ]J}j         |         d                                                                          k    =j         |         KS )r   )r   r   )re   rA   r   r   s     r/   
<listcomp>z*GlueDict.lookup_unique.<locals>.<listcomp>  sU     
 
 
~c"5)//11SYY[[@@ N3@@@r1   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   s    ` ` r/   r   zGlueDict.lookup_unique  s    
 
 
 
 
*4<+>+>+@+@AA
 
 
 t99>>5<<T&\3OO   YY]]8??VcRR   7Nr1   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      s          
s s s sj  $   "
 
 
4; ; ;  <! ! !$  $/ / /  "P "P "PH) ) )V  *    r1   rt   c                   V    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dS )GlueNFc                     || _         || _        || _        ddlm}  |            | _        |r	|| _        d S t          j        	                    ddd          | _        d S )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__  su     !2"      gii 	 ,D "-~! !Dr1   c           	          |r| j                             |           d S | j                             t          j                            t          j                            ddd                               d S )Nr  r  zglue_train.conll)	r!  traintrain_from_filer   r   findr$  r%  ri   )r.   	depgraphss     r/   train_depparserzGlue.train_depparser/  st     	N  +++++N**	GLL->@RSS     r1   c                     g }|                      |          D ]*}|                    |                     |                     +|S rD   )parse_to_compiledr   get_readings)r.   sentencereadingsagendas       r/   parse_to_meaningzGlue.parse_to_meaning9  sL    ,,X66 	7 	7FOOD--f556666r1   c                    g }t          |          }t                      }t                      }|rT|                                }|j                                        }t          |t          j                  r|D ]}	 t          |j        t          j                  r|j        j	        }	nt          j
                    }	|j                            ||	           ||         D ]P}
|j        |
j        z  s?	 |                    |                    |
                     ;# t          j        $ r Y Lw xY wQ# t          j        $ r Y w xY w	 ||j                                     |           n# t$          $ r |g||j        <   Y n w xY w|D ]}||         D ]}	 t          |j        t          j                  r|j        j	        }	nt          j
                    }	|                    ||	           |j        |j        z  s?	 |                    |                    |                     n# t          j        $ r Y nw xY w# t          j        $ r Y w xY w	 ||                             |           n# t$          $ r	 |g||<   Y nw xY w|T|D ];}||         D ]0}t          |j                  |k    r|                     ||           1<|D ];}||         D ]0}t          |j                  |k    r|                     ||           1<|S rD   )r   dictpopr+   r7   r#   r   rM   r6   bindingsBindingDictr8   unifyr,   r   r;   r5   UnificationExceptionr   _add_to_reading_list)r.   r1  r0  agenda_lengthatomics
nonatomicscur	glue_simpkeyr6  atomic	nonatomicentryr   s                 r/   r.  zGlue.get_readings?  s   F&&VV
 3	/**,,C))++I;4  0/ #  C%ch0QRR A'*x'8HH'2'>'@'@H!,223AAA&-cl ) )F #fn <)!)$*MM#++f2E2E$F$F$F$F'2'R !) !) !)$(D!))) ';   =y34;;C@@@@ = = =8;uJy3444= & ! !C%/_ ! !	!) )0Q    E ,5>+B+6+B+D+D%OOC::: #i.? ?)!)$*MM)2C2CC2H2H$I$I$I$I'2'R !) !) !)$(D!)*? ! ! ! D!!!$/I&--c2222 / / /*-GI&&&/e  3	/j  	< 	<Een < <rz??m33--b(;;;<   	< 	<E ' < <rz??m33--b(;;;< s   >A3D22(DD2D-*D2,D--D22EE E* *FFA$H9:(H#"H9#H52H94H55H99I
II, ,I?>I?c                     d}| j         rQ|D ]N}	 |                    |j        | j                  rd} n((# t          $ r}t          d|           Y d }~Gd }~ww xY w|r|                    |j                   d S d S )NTFz2Error when checking logical equality of statements)r   equivr&   r"  	Exceptionprintr   )r.   glueformulareading_listadd_readingreadingr?   s         r/   r:  zGlue._add_to_reading_list  s    ! 
	S' 	S 	SS}}[%8$+FF &+ ! S S S NPQRRRRRRRR	S  	5 344444	5 	5s   "4
AAAc                 b      fd                      |          D             } fd|D             S )Nc                 :    g | ]}                     |          S r]   )depgraph_to_glue)re   dgr.   s     r/   r  z*Glue.parse_to_compiled.<locals>.<listcomp>  s'    MMMb%%b))MMMr1   c                 :    g | ]}                     |          S r]   )gfl_to_compiled)re   gflr.   s     r/   r  z*Glue.parse_to_compiled.<locals>.<listcomp>  s'    :::c$$S)):::r1   )	dep_parse)r.   r/  gflss   `  r/   r-  zGlue.parse_to_compiled  sB    MMMMDNN84L4LMMM::::T::::r1   c                     | j         )ddlm}  ||                                           | _         | j         j        s|                                  | j                             || j                  S )z
        Return a dependency graph for the sentence.

        :param sentence: the sentence to be parsed
        :type sentence: list(str)
        :rtype: DependencyGraph
        Nr   
MaltParsertagger)r   )r!  
nltk.parserW  get_pos_tagger_trainedr+  r*   r   )r.   r/  rW  s      r/   rS  zGlue.dep_parse  sz     >!------'Zt/B/B/D/DEEEDN~& 	#  """~##Hdl#CCCr1   c                 P    |                                                      |          S rD   )get_glue_dictr   )r.   r   s     r/   rN  zGlue.depgraph_to_glue  s"    !!##77AAAr1   c                 *    t          | j                  S rD   )rt   r#  rY   s    r/   r^  zGlue.get_glue_dict  s    )***r1   c                     t                      }g }|D ]*}|                    |                    |                     +| j        r#t	          d           |D ]}t	          |           |S )NzCompiled Glue Premises:)r   r   rW   r   rG  )r.   rR  index_counterreturn_listr   cgfs         r/   rQ  zGlue.gfl_to_compiled  s}    		 	: 	:Brzz-889999< 	+,,,"  c



r1   c                     ddl m} t          g d          }|                    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.*ri  news)
categories)backoff)z(A|a|An|an)$r   )z(Every|every|All|all)$r   )nltk.corpusre  r   tagged_sentsr   r   r   )r.   re  regexp_taggerbrown_trainunigram_taggerbigram_taggertrigram_taggermain_taggers           r/   r[  zGlue.get_pos_tagger  s    %%%%%%$
 
 

 
 ((F(;;&{MJJJ$[.III&{MJJJ #*,UV"
 
 

 r1   NFNFrD   )rp   rq   rr   r0   r+  r2  r.  r:  r-  rS  rN  r^  rQ  r[  r]   r1   r/   r  r    s        RW   $     B B BH5 5 5"; ; ;D D D$B B B+ + +      r1   r  c                   "    e Zd ZddZd Zd ZdS )DrtGlueFormulaNc                    |st                      }t          |t                    r%t          j                            |          | _        n<t          |t          j                  r|| _        nt          d|d|j                  t          |t                    r,t          j
                                        |          | _        n<t          |t          j                  r|| _        nt          d|d|j                  || _        d S r    )r"   r#   r$   r   DrtExpressionr%   r&   r'   r(   r   r)   r*   r+   r   r,   r-   s       r/   r0   zDrtGlueFormula.__init__  s
    	eeGgs## 	,77@@DLL!233 	"DLL,77G--/  
 dC   	#577==dCCDIIk455 	DII,44)  
 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66r1   rD   )rp   rq   rr   r0   rG   r:   r]   r1   r/   r{  r{    sF           4/ / /7 7 7 7 7r1   r{  c                       e Zd Zd ZdS )DrtGlueDictc                     t           S rD   )r{  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dS )DrtGlueNFc                     |s!t           j                            ddd          }t                              | ||||           d S )Nr  r  zdrt_glue.semtype)r$  r%  ri   r  r0   )r.   r#  r   r!  r   s        r/   r0   zDrtGlue.__init__  sM      	7<<-/A L 	dL*;YPPPPPr1   c                 *    t          | j                  S rD   )r  r#  rY   s    r/   r^  zDrtGlue.get_glue_dict  s    4,---r1   ry  )rp   rq   rr   r0   r^  r]   r1   r/   r  r    s>        RWQ Q Q Q. . . . .r1   r  r4   c                    ddl m} g d}t          d           t          g d          } ||          }t	          |d          }t          |          D ]\  }}|| k    s| d	k    rot          d
| d|            |                    |                                          D ]#}t          |                                           $t          d           d S )Nr   rV  )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)$ri  )z^(big|gray|former)$rh  )z^(him|himself)$PRPrX  F)r!  r   r4   z[[[Example z]]]  r   )	rZ  rW  rG  r   r  r   r2  r   r7   )	show_examplerW  examplesrY  r!  r+   r   r/  rK  s	            r/   demor    s#   %%%%%%  H$ 

.///	
 	
 	
 F  
&)))I)U333D **  8 2 222222333001A1ABB * *g&&(())))"III 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   r4  rt   r  r{  r  r  r  rp   r]   r1   r/   <module>r     s=   
			        " " " " " " % % % % % % % %              N M M M M M M M M M M M 


  322 r r r r r r r rj@ @ @ @ @t @ @ @F| | | | | | | |~7 7 7 7 7[ 7 7 7D    (   
. . . . .d . . ./ / / /d zDFFFFF r1   