JL idZddlZddlZddlZddlZddlZddlmZddlm Z ddl m Z ddl m Z mZmZmZmZmZmZmZmZddlmZmZmZmZGdd ZGd d eZGd d eZGddZGddeZGddeZ GddeZ!Gdde!Z"Gdde!Z#Gdde!Z$Gdde!Z%Gdde!Z&Gd d!e!Z'Gd"d#e!Z(Gd$d%e!Z)Gd&d'Z*Gd(d)Z+Gd*d+e,Z-e.d,k(rQe d-Z/e/jad.d/d0d1d2d34e/jad5d6d7d1d2d84e/jad9d:d;d1d2d<4e/jad=d>d?d1d2d@4e/jc\Z2Z3e4e3dAk7re/jkdBe+e2jlCZ7ee7jqe3djsdDe2jte2jvEZ$@ !&;#   '*c|jd|||_tjj tjj |jddd|_|jd|||_y)Ncandcz ../modelsboxer) _find_binary _candc_binospathnormpathjoin_candc_models_path _boxer_bin)rrr s r"rzBoxer.set_bin_dir]sd++GWgF"$''"2"2 GGLL"-{ ;# ++GWgFr$cf||gnd}|j|gg|||\}|std|d|S)aI Use Boxer to give a first order representation. :param input: str Input sentence to parse :param occur_index: bool Should predicates be occurrence indexed? :param discourse_id: str An identifier to be inserted to each occurrence-indexed predicate. :return: ``drt.DrtExpression`` NUnable to interpret: ""interpret_multi_sents Exceptionrinput discourse_idquestionr discourse_idsds r" interpretzBoxer.interpretdsK+7*B ))E7)]HgV4UG1=> >r$cd||gnd}|j|g|||\}|std|d|S)ah Use Boxer to give a first order representation. :param input: list of str Input sentences to parse as a single discourse :param occur_index: bool Should predicates be occurrence indexed? :param discourse_id: str An identifier to be inserted to each occurrence-indexed predicate. :return: ``drt.DrtExpression`` Nr2r3r4r7s r"interpret_multizBoxer.interpret_multissI+7*B ))5'=(GT4UG1=> >r$cR|j|Dcgc]}|gc}|||Scc}w)a{ Use Boxer to give a first order representation. :param inputs: list of str Input sentences to parse as individual discourses :param occur_index: bool Should predicates be occurrence indexed? :param discourse_ids: list of str Identifiers to be inserted to each occurrence-indexed predicate. :return: list of ``drt.DrtExpression`` )r5)rinputsr;r:r r8s r"interpret_sentszBoxer.interpret_sentss0))"( )eW )=(G  )s $c |?t|t|k(sJttjd|DsJd}n-t t t tt|}d}|j||||}|j||}|j||}|D cgc]} |j| dc} Scc} w)ac Use Boxer to give a first order representation. :param inputs: list of list of str Input discourses to parse :param occur_index: bool Should predicates be occurrence indexed? :param discourse_ids: list of str Identifiers to be inserted to each occurrence-indexed predicate. :return: ``drt.DrtExpression`` Nc3$K|]}|du ywN).0ids r" z.Boxer.interpret_multi_sents..s)QR"D.)QsTF)r ) lenroperatorand_listmapstrrange _call_candc _call_boxer_parse_to_drs_dictget) rrAr;r:r use_disc_id candc_out boxer_outdrs_dictrHs r"r5zBoxer.interpret_multi_sentss  $v;#m"44 44(--)Q=)QR RRK S%F *MK$$V]Hg$V $$Y$@ **9kB1>?2 R&???s-C c dtjj|jddg|ddg}|j djt dt ||Dg|j||S)aF Call the ``candc`` binary with the given input. :param inputs: list of list of str Input discourses to parse :param discourse_ids: list of str Identifiers to be inserted to each occurrence-indexed predicate. :param filename: str A filename for the output file :return: stdout z--modelsr( questionsz--candc-printer c36K|]\}}d|dg|zyw)z''NrF)rGr<rHs r"rIz$Boxer._call_candc..s$Suq"t1o&*Ss)r+r,r.r/_callsumzipr*)rrAr;r:r argss r"rQzBoxer._call_candcs~  GGLL007K2H2R S     zz IISFM8RS  OO    r$cd} tjddd\}}tj|d}|j |j d|r|j  dd d d d d d g|jdd d g|jdddd d|g}|jd|j||}tj||S#|r|j wwxYw)z Call the ``boxer`` binary with the given input. :param candc_out: str output from C&C parser :return: stdout Nzboxer-z.inT)prefixsuffixtextwutf-8z--boxfalsez --semanticsdrsz --resolvetruez--elimeqz--formatprologz --instantiatez--input) tempfilemkstempr+fdopenwritedecodecloserrr^r0remove)rrVr ffd temp_filenamerastdouts r"rRzBoxer._call_boxers   ( 0 0D! B  "c"A GGI$$W- .       f dmm ,  f dll +       "D$//4A -  - s AC C c 0t||dgd||dzg|S)NCANDCz)http://svn.ask.it.usyd.edu.au/trac/candc/z.exe) path_to_binenv_varsurl binary_namesr r)rnamerr s r"r)zBoxer._find_binarys, Y;v .   r$c|rEtd|td|td|td|dzdj|z|;|g|z}tj|tjtj}nWdj ||dj|}tj|tjtjd }|j \}}|r4td |j|r td |d |r td |d |jdk7r6tdj |dj||j||S)a Call the binary with the given input. :param input_str: A string whose contents are used as stdin. :param binary: The location of the binary to call :param args: A list of command-line arguments. :return: stdout zCalling:zArgs:zInput:zCommand: )rvstderrzecho "{}" | {} {}T)rvrshellz Return code:zstdout: r[zstderr: rz&ERROR CALLING: {} {} Returncode: {} {}) printr. subprocessPopenPIPEformat communicate returncoder6) r input_strbinaryrar cmdprvrs r"r^z Boxer._calls/  *f % '4 (I & *fslSXXd^; <  (T/C  Z__Z__UA%,,YOC  JOOJOO4A  .!,, /k640k640 <<1 :AACHHTNALL&   r$c<|jdjd}i}d}|t|krh||}|jdr<|j d}|d|}|ddk(r |ddk(r|d d}||d z|j d } |d z }||}|jd | dsJ|d dd k(r|dd dz}|j ds Jd|td | d} d } d} t || dD]?\} }|dk(r| d z } |dk(s| d z} | dk(s!| | zd z} || | dzdk(r| dz} n| d z} n| dkDsJ|| dj}|j|||}|jj|||<|d z }|t|krh|S)Nrgr[rzid(,r])zsem(z').'z).zcan't parse line: z,[[]z',') rpsplitrJ startswithindexendswith enumeratestrip _parse_drsrr=)rrWrUlinesrXiline comma_idxr9drs_id search_start brace_count drs_startjc drs_inputparseds r"rSzBoxer._parse_to_drs_dict"s  )//5 #e*n8Du% JJsO #Ai0 ?c)l2.>#.E#/"#5Li!mdjjo>QQxfXQ'78889&9t+D}}T*G.@,GG*"T&#45   %d<=&9: "DAqCx#q( Cx#q( &!+(4q(81(%G,5M ,5M ! "!2~%~ 2.446 L+N)-)D)D)N)Nv)V& FAG#e*nHr$c@td|g|j|SrE)BoxerOutputDrsParserparse)r drs_stringr9rUs r"rzBoxer._parse_drsLs"#T<$8$EFLLZXXr$)NFNFTF)NFF)__name__ __module__ __qualname____doc__r#rr=r?rBr5rQrRr)r^rSrrFr$r"rr;so# +8G   CH  CH@8 6%N -/'R(TYr$rceZdZd!dZd!dZdZdZdZdZdZ d Z d Z d Z d Z d ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ d Z!y)"rNcZtj|||_d|_dg|_y)zz This class is used to parse the Prolog DRS output from Boxer into a hierarchy of python objects. N)r]r]\F)r r#r9sentence_id_offset quote_charsrr9s r"r#zBoxerOutputDrsParser.__init__Qs- 4 ("&34r$c0tj|||SrE)r r)rdata signatures r"rzBoxerOutputDrsParser.parse[stT955r$c gdS)N)(rrrr:rFrs r"get_all_symbolsz$BoxerOutputDrsParser.get_all_symbols^s--r$c$|j|SrE) handle_drs)rtokcontexts r"handlezBoxerOutputDrsParser.handleass##r$c|SrErFr expressionrs r"attempt_adjunctsz%BoxerOutputDrsParser.attempt_adjunctsdr$cd|j}|j||}| t||S)zS Parse a DRS condition :return: list of ``DrtExpression`` )tokenhandle_conditionr)rindicesraccums r"parse_conditionz$BoxerOutputDrsParser.parse_conditiongs6 jjl%%c73 =*3/ / r$c|dk(r|jS|dvr"|j|jdgS|dvr"|j|jdgSy)Nri)mergesmerge)alfa) parse_drs_handle_binary_expression_make_merge_expression _handle_alfa)rrs r"rzBoxerOutputDrsParser.handle_drsssl %<>># # ' 'N411$2M2MNtUWX X H_A4$$T%@%@A$K Kr$c|dk(r|jgS|dk(r|j|jgn|dk(r|j|jgn|dk(r|j gn|dk(r|j gn|dk(r|j gn|dk(r|jgnt|dk(r|jgn]|d k(r|jnG|d k(r|jgn0|d k(r|jgn|d k(r|jgngtfd |j|DgS)zx Handle a DRS condition :param indices: list of int :return: list of ``DrtExpression`` notorimpeqpropprednamedreltimexcardwhqduplexc3\K|]\}}Dcgc] }||| c} ycc}wwrErF)rG sent_index word_indicescondcondss r"rIz8BoxerOutputDrsParser.handle_condition..s3 ,J =BBDj,/B Bs ,' ,) _handle_notr_make_or_expression_make_imp_expression _handle_eq _handle_prop _handle_pred _handle_named _handle_rel _handle_timex _handle_card _handle_whq_handle_duplexr__sent_and_word_indices)rrrrs @r"rz%BoxerOutputDrsParser.handle_condition{sb %<$$&' ' $;33D4L4LMNE E\33D4M4MNOE D[__&'E F]&&()E F]&&()E G^'')*E E\%%'(E G^&&(E F]&&()E E\%%'(E H_((*+EE 040K0KG0T     r$c|j|jd|jd}|j|jdt|S)Nrr) assertTokenrprocess_next_expressionBoxerNotrris r"rz BoxerOutputDrsParser._handle_notsH s+**40 s+}r$cjjdjjjdjjjdjjjdtjjjdfd}|S)Nrrrc :tj||SrE BoxerPredr9)rrr}posrsensevariables r"_handle_pred_fz9BoxerOutputDrsParser._handle_pred.._handle_pred_fs&!!:|XtSRW r$rrparse_variableint)rrr}rrrs` @@@@r"rz!BoxerOutputDrsParser._handle_preds s+&&( s+zz| s+jjl s+DJJL! s+   r$cjjdgjjdjjdjdjjdjjjdjdjjdfdS)Nrrrrc :tj||SrEBoxerWhqr9rr ans_typesd1d2refrs r"z5BoxerOutputDrsParser._handle_duplex..!   z<BR1 r$)rrrr)rr rrrs`@@@@r"rz#BoxerOutputDrsParser._handle_duplexs s+ " u- s+  ) )$ / s+!!# s+  ) )$ / s+  r$cjjdjjjdjjjdjjjdjjjdfdS)Nrrrc :tj||SrE) BoxerNamedr9)rrr}rrtypers r"rz4BoxerOutputDrsParser._handle_named..s!   z<4u1 r$rrr)rr}rrrs`@@@@r"rz"BoxerOutputDrsParser._handle_nameds s+&&( s+zz| s+zz| s+  s+  r$cjjdjjjdjjjdjjjdtjjjdfdS)Nrrrc :tj||SrE)BoxerRelr9)rrrrrvar1var2s r"rz2BoxerOutputDrsParser._handle_rel..s!   z<tS%1 r$r)rrrrrs`@@@@r"rz BoxerOutputDrsParser._handle_rels s+""$ s+""$ s+jjl s+DJJL! s+  r$c|j|jd|j}|j|jd|j|}|j|jd|S)Nrrr)rrr_handle_time_expression)rarg new_condss r"rz"BoxerOutputDrsParser._handle_timexsh s+!!# s+005  s+r$cTjjjddk(rj}ndk(rj}nyjjdd}fdg|Dcgc] }|| c}zScc}w)NrdatetimercfdS)NcSrErF)rrxs r"rzPBoxerOutputDrsParser._handle_time_expression..func_gen..sAr$rF)r&s`r"func_genz>BoxerOutputDrsParser._handle_time_expression..func_gens 5 5r$c :tj||ddS)Nnrr)rrrrrs r"rz>BoxerOutputDrsParser._handle_time_expression..s!Y!!:|S#sA.r$)rr _handle_date _handle_time)rrrr'rrs`` @r"rz,BoxerOutputDrsParser._handle_time_expression sjjl s+ &=%%c*E F]%%c*E s+ 6  ). .Xd^ . / / /sB%c g}|j|j\\}}|j|jd|j}|j|jd|j t |j |||d|dd|j|jd|j|j\\}}|j}|dk7r?|jdd }|j t |j |||d |dd|j|jd|j|j\\}}|j}|d k7r-|j t |j |||d |dd|j|jd|j|j\\}}|j}|d k7r-|j t |j |||d |dd|S)Nrr date_pol_arrXXXXr_ date_year_XX date_month_ date_day_)r_parse_index_listrrappendrr9replace) rrrrrpolyearmonthdays r"r*z!BoxerOutputDrsParser._handle_datesC(,(C(C  " " $) % #*l s+jjl s+ !!C5!   s+(,(C(C  " " $) % #*lzz| 6><<S)D LL%%  '  s+(,(C(C  " " $) % #*l  D= LL%% !%)  s+(,(C(C  " " $) % #*ljjl $; LL%% u%  r$c4g}|j|j}|dk7r"|j|jd|||j |jd|j|j}|dk7r"|j|jd|||j |jd|j|j}|dk7r"|j|jd|||S)Nr2r_hour_2rr_min_2r_sec_2)r5rr6 _make_atomr)rrrhourminsecs r"r+z!BoxerOutputDrsParser._handle_timems  zz| 4< LLS$? @ s+  jjl $; LLC= > s+  jjl $; LLC= > r$czjjdjjjdjjjdjjjdfdS)Nrrrc8tj||SrE) BoxerCardr9)rrrrvaluers r"rz3BoxerOutputDrsParser._handle_card..s   z<5$1 r$r)rrrGrs`@@@r"rz!BoxerOutputDrsParser._handle_cards s+&&( s+  s+zz| s+  r$cjjdjjjdjdjjdfdS)Nrrrc6tj||SrE) BoxerPropr9)rrrirrs r"rz3BoxerOutputDrsParser._handle_prop..s   z<31 r$)rrrr)rrirs`@@r"rz!BoxerOutputDrsParser._handle_propsm s+&&( s+**40 s+  r$cg}|j|jd|jddk7rX|j|j|jddk(r|j|jddk7rX|j|j|jd|S)Nrrrrr)rrr6 parse_index)rrs r"r5z&BoxerOutputDrsParser._parse_index_lists s+jjms" NN4++- .zz!}# jjms"  s+r$c|j|jd|j|jdt}|jddk7rh|j}|j |j |jddk(r|j|jddk7rh|j|j|jd|j|jdg}|jddk7ri|j}|j |j||jddk(r|j|jddk7ri|j|j|jdtt||S)Nrrrrrr) rrsetr5addrextendrBoxerDrsrM)rrefsrrs r"rzBoxerOutputDrsParser.parse_drssc s+ s+ujjms",,.G HHT((* +zz!}# jjms"  s+ s+jjms",,.G LL--g6 7zz!}# jjms"  s+T E**r$c|j|jd|jd|j|jd|jd|j|jdfdS)Nrrrc||SrErFrrdrs1drs2 make_callbacks r"rz@BoxerOutputDrsParser._handle_binary_expression..  dD1 r$rrr)rrXrVrWs `@@r"rz.BoxerOutputDrsParser._handle_binary_expressionso s+++D1 s+++D1 s+  r$cz|j|jd|j}|j|jd|jd|j|jd|jd|j|jdfdS)Nrrrc||SrErFrUs r"rz3BoxerOutputDrsParser._handle_alfa..rYr$rZ)rrXrrVrWs ` @@r"rz!BoxerOutputDrsParser._handle_alfas s+zz| s+++D1 s+++D1 s+  r$cjjdjjjdjjjdfdS)Nrrrc6tj||SrE)BoxerEqr9)rrrrrs r"rz1BoxerOutputDrsParser._handle_eq..s   z<t1 r$r)rrrs`@@r"rzBoxerOutputDrsParser._handle_eqsk s+""$ s+""$ s+  r$cjjdjjdgjddk7r؉j}jjd|dk(r jjnn|dk(rJjdj}|d k(rjd n1j|njjjddk7r؉jjjd jdjjd j jjd jdjjd fd S)Nrrrrrdesnumnumbercoucountrrc :tj||SrEr r s r"rz2BoxerOutputDrsParser._handle_whq..rr$)rrr6rr)rcattypr rrrs` @@@@r"rz BoxerOutputDrsParser._handle_whqs s+ s+ jjms"**,C   TZZ\3 /e|  .  *jjl%<$$W-$$S)  .jjms"  s+  ) )$ / s+!!# s+  ) )$ / s+  r$cvt|j|jz|j|jzSrErQrRrrrrrVrWs r"rz+BoxerOutputDrsParser._make_merge_expressions) DII-tzzDJJ/FGGr$c4t|j||||SrE)BoxerOrr9rks r"rz(BoxerOutputDrsParser._make_or_expressionst((*lD$OOr$cDt|j|j|SrErjrks r"rz)BoxerOutputDrsParser._make_imp_expressions 4::t44r$c`|j}tjd|sJ||S)Nz ^[exps]\d+$)rrematchrvars r"rz#BoxerOutputDrsParser.parse_variables+jjlxx,1c1, r$c4t|jSrE)rrrs r"rLz BoxerOutputDrsParser.parse_index s4::<  r$c |Dchc]}|dk\s |dz dz }}|r?g}|D]6}|Dcgc]}||dz dz k(s|dzdz }}|j||f8|S|Dcgc] }|dzdz  }}d|fgScc}wcc}wcc}w)zD :return: list of (sent_index, word_indices) tuples rirN)r6)rrr sent_indicespairsrrs r"rz+BoxerOutputDrsParser._sent_and_word_indicess18B116TQB B E* 9 ,3 '(za$hRS^7SQXN    j,78  9 L4;HP5 !*r$rc6eZdZdZd dZdZdZdZdZdZ y) BoxerDrsParserzD Reparse the str form of subclasses of ``AbstractBoxerDrs`` Nc<tj|||_yrE)r r#r9rs r"r#zBoxerDrsParser.__init__'s4 (r$ctjtjtjtjtj gSrE)rOPENCLOSECOMMA OPEN_BRACKET CLOSE_BRACKETrs r"rzBoxerDrsParser.get_all_symbols+s3 NN OO OO  " "  # #   r$c|SrErFrs r"rzBoxerDrsParser.attempt_adjuncts4rr$c  |dk(r|jtj|j |jn|j }|jtj |j }|jtj ttt|j}|jtj t|j }|jtj |j }|jtj |j }|jtj t|j } |jtjt||||||| S|dk(r|jtj|j |jn|j }|jtj t|j }|jtj tt|j}|jtj t|j }|jtj |j }|jtj |j } |jtj t|j } |jtjt|||||| | S|dk(r|jtj|j |jn|j }|jtj |j }|jtj ttt|j}|jtj t|j } |jtj t|j } |jtj |j } |jtj t|j } |jtjt|||| | | | S|dk(r[|jtj|j |jn|j }|jtj t|j }|jtj ttt|j}|jtj t|j }|jtj |jd}|jtjt!|||||S|dk(rZ|jtj|jd}|jtjt#|S|dk(r|jtj|jd}|jtj |jd}|jtjt%|j&|j(|S|dk(rA|jtj|j |jn|j }|jtj |j }|jtj tt|j}|jtj |jd}|jtj |jd}|jtjt+|||||S|dk(rZ|jtj|j |jn|j }|jtj |j }|jtj ttt|j}|jtj t|j } |jtj t|j } |jtjt-|||| | S|d k(rx|jtj|j |jn|j }|jtj |j }|jtj tt|j}|jtj t|j }|jtj |j }|jtj |j } |jtjt/|||||| S|d k(r|jtj|j |jn|j }|jtj |j }|jtj ttt|j}|jtj |j}|jtj |jd}|jtj t|j }|jtj |jd}|jtjt1|||||||S Jt;|#t2$r%}t5|j6t9||d}~wwxYw) Nrrrrrrrrrr)assertNextTokenrr|r9rr~nullableIntTokenrMrNr handle_refsr}rrrrrJrrQrRrrmr_rFr r6r _currentIndexrOrepr)rrrdisc_idsent_idword_idsrr}rrrrrrrirVrWrsrGr es r"rzBoxerDrsParser.handle7s c Pf}$$Y^^4)-):):)FD%%DJJL$$Y__5//1$$Y__5C)9)9); <=$$Y__5tzz|,$$Y__5zz|$$Y__5jjl$$Y__5DJJL)$$Y__5 '8XtSRWXX$$Y^^4)-):):)FD%%DJJL$$Y__5djjl+$$Y__5sD$4$4$67$$Y__5tzz|,$$Y__5zz|$$Y__5zz|$$Y__5DJJL)$$Y__5!Wh$e$$Y^^4)-):):)FD%%DJJL$$Y__5//1$$Y__5C)9)9); <=$$Y__54::<($$Y__54::<($$Y__5jjl$$Y__5DJJL)$$Y__5(D$USS$$Y^^4)-):):)FD%%DJJL$$Y__5djjl+$$Y__5C)9)9); <=$$Y__5tzz|,$$Y__52248$$Y__5 '8XsKK$$Y^^42248$$Y__5}$$$Y^^433D9$$Y__533D9$$Y__5 4::t<<$$Y^^4)-):):)FD%%DJJL$$Y__5//1$$Y__5sD$4$4$67$$Y__533D9$$Y__533D9$$Y__5w4FF$$Y^^4)-):):)FD%%DJJL$$Y__5//1$$Y__5C)9)9); <=$$Y__54::<($$Y__54::<($$Y__5w4FF$$Y^^4)-):):)FD%%DJJL$$Y__5//1$$Y__5sD$4$4$67$$Y__5$**,'$$Y__5 $$Y__5zz|$$Y__5 '8S%NN$$Y^^4)-):):)FD%%DJJL$$Y__5//1$$Y__5C)9)9); <=$$Y__5 ,,. $$Y__533D9$$Y__5$**,'$$Y__533D9$$Y__5(ItSRVWW%* d3iu P,T-?-?QHa O PsWF?vF?vGv E v,Av B$v0Ev7EvE=vF8v w ( ww cF|j}|dk7r t|SdS)NNone)rr)rts r"rzBoxerDrsParser.nullableIntTokens" JJLfs1v.$.r$ct |jS#t$r}t|jd|d}~wwxYw)NzVariable expected.)rrr)r descriptionrs r"get_next_token_variablez&BoxerDrsParser.get_next_token_variables; T::< * T-agg7KLRS S Ts 727rE) rrrrr#rrrrrrFr$r"ryry"s() e N/Tr$ryc<eZdZdZdZdZdZdZdZdZ dZ y ) AbstractBoxerDrscF|j\}}}|||zz |||z fSzK :return: (set, set, set) ) _variables)r variablesevents propositionss r"rzAbstractBoxerDrs.variabless3+///*;' 6<Vl23V\F=RSSr$cfi}td|jD]\}}|D]}|||< |S)N)zrr)r`r)rvartypesrvarsvs r"variable_typeszAbstractBoxerDrs.variable_typessG?DNN,<= GAt    r$c<tttfSrrNrs r"rzAbstractBoxerDrs._variablesssuce$$r$ctSrErrs r"atomszAbstractBoxerDrs.atoms u r$c|SrErFrs r"cleanzAbstractBoxerDrs.clean r$cF|jddjddS)N-r0r])r7)rr}s r" _clean_namezAbstractBoxerDrs._clean_names ||C%--c377r$c|SrErFrrss r"renumber_sentencesz#AbstractBoxerDrs.renumber_sentencesrr$ct|SrE)hashrs r"__hash__zAbstractBoxerDrs.__hash__ stfr$N) rrrrrrrrrrrrFr$r"rrs+T% 8r$rcVeZdZd dZdZdZdZdZdZdZ d Z e jZ y) rQNcXtj|||_||_||_yrE)rr#rRr consequent)rrRrrs r"r#zBoxerDrs.__init__s%!!$'  $r$cZtttf}|jD]5}t||jD]\}}|j |7|j =t||j jD]\}}|j ||SrE)rNrr`rupdater)rrrsrs r"rzBoxerDrs._variablessUCE35) JJ DIt'89 1    ?? &It'A'A'CD 1  r$cttjd|jDt }|j )|j |j j|S)Nc3<K|]}|jywrE)r)rGrs r"rIz!BoxerDrs.atoms.. s%Jtdjjl%Js)rrKor_rrNrrr)rrs r"rzBoxerDrs.atomssHx||%Jtzz%JCER ?? & LL..0 1 r$c|jr|jjnd}t|j|jDcgc]}|jc}|Scc}wrE)rrrQrRr)rrrs r"rzBoxerDrs.clean%sG04T__**,T  tzz#B!AGGI#BJOO#BsA& c |jr|jj|nd}t|j|jDcgc]}|j|c}|Scc}wrE)rrrQrRr)rrsrrs r"rzBoxerDrs.renumber_sentences)sT>BooT__77:SW  IIDA,,Q/Dj  DsA( cdjdjd|jDdjd|jD}|jd|d|jd}|S)Nzdrs([{}], [{}]), c3&K|] }d|z yw%sNrF)rGrs r"rIz$BoxerDrs.__repr__..1s21dQh2c3&K|] }d|z ywrrF)rGrs r"rIz$BoxerDrs.__repr__..2s31dQh3rzimp(r)rr.rRrr)rrs r"__repr__zBoxerDrs.__repr__/sh  $ $ II2 2 2 II3 3 3  ?? &qcDOO,A.Ar$c||j|jk(xr|j|jk(xrt|jt|jk(xrZt t j dt|j|jDxr|j|jk(S)Nc3,K|] \}}||k(ywrErF)rGc1c2s r"rIz"BoxerDrs.__eq__..>sTVRbT) __class__rRrJrrrKrLr`rrothers r"__eq__zBoxerDrs.__eq__8s NNeoo - 4 UZZ' 4DJJ3u{{#33 4 Ts4::u{{7ST 4 5#3#33 r$c||k( SrErFrs r"__ne__zBoxerDrs.__ne__C5=  r$rE rrrr#rrrrrrrrrrFr$r"rQrQs8%  P   ! ((Hr$rQcTeZdZdZdZdZdZdZdZdZ dZ e jZ y ) rc<tj|||_yrE)rr#rirs r"r#zBoxerNot.__init__Js!!$'r$c6|jjSrE)rirrs r"rzBoxerNot._variablesNsxx""$$r$c6|jjSrErirrs r"rzBoxerNot.atomsQxx~~r$cHt|jjSrE)rrirrs r"rzBoxerNot.cleanTs())r$cJt|jj|SrE)rrirrs r"rzBoxerNot.renumber_sentencesWs33A677r$c d|jzS)Nznot(%s)rirs r"rzBoxerNot.__repr__ZsDHH%%r$cj|j|jk(xr|j|jk(SrE)rrirs r"rzBoxerNot.__eq__]s'~~0JTXX5JJr$c||k( SrErFrs r"rzBoxerNot.__ne__`rr$NrrFr$r"rrIs8% *8&K! ((Hr$rcBeZdZdZdZdZdZejZdZ y) BoxerIndexedcXtj|||_||_||_yrE)rr#r9rr)rr9rrs r"r#zBoxerIndexed.__init__gs'!!$'($(r$c|hSrErFrs r"rzBoxerIndexed.atomsms v r$c0|j|jk(xr||j|jk(xra|j|jk(xrF|j|jk(xr+t t j dt||DS)Nc3,K|] \}}||k(ywrErF)rGros r"rIz&BoxerIndexed.__eq__..vs&K$!QqAv&Kr)rr9rrrrKrLr`rs r"rzBoxerIndexed.__eq__ps NNeoo - M!!U%7%77 M5#3#33 M!!U%7%77 Mx}}&K#dE:J&KL  r$c||k( SrErFrs r"rzBoxerIndexed.__ne__yrr$c dj|j|j|jdj d|j D}|D] }|d|zz } |dzS)Nz{}({}, {}, [{}]rc3&K|] }d|z ywrrF)rGwis r"rIz(BoxerIndexed.__repr__..s 388DNN+ +c 1499dmmTYY W  r$cy)NrrFrs r"rzBoxerWhq._predr r$Nr2rFr$r"r r s% 5     r$r ceZdZdZy)PassthroughBoxerDrsInterpreterc|SrErF)rexs r"r=z(PassthroughBoxerDrsInterpreter.interprets r$N)rrrr=rFr$r"r<r<sr$r<c&eZdZddZdZdZdZy)rc||_yrE) _occur_index)r occur_indexs r"r#z#NltkDrtBoxerDrsInterpreter.__init__s 'r$c ft|trt|jDcgc] }t |c}t t |j|j}|j |j|j|_ |St|tr$t|j|jSt|trG|j|jd|j |}|j#||j$St|t&rH|jd|j(d|j |}|j#||j$St|t*rF|jd|j,z|}|j#||j.|j0St|t2r8t5t |j$|j|jSt|t6rDt9t;t |j.t;t |j0St|t<rH|jd|j(d|j>|}|j#||j$St|t@r>tC|j|jD|j|jFSt|tHrp|j|jD}|j|jF}t|j|jz|j|jzSJ|jJjLd|cc}w)zT :param ex: ``AbstractBoxerDrs`` :return: ``DrtExpression`` r0ne_rcard_z: )' isinstancerQrrRrrMrNr=rrrr rir_add_occur_indexingrr}r@rsrrrrrrrJr r_r rrFrGrmr rVrWr rr)rr>rrirrVrWs r"r=z$NltkDrtBoxerDrsInterpreter.interprets b( #&(gg.!.S5R0SC}}(!% !>J H %'rvv(>? ? I &++rvvhay,A2FD??40 0 J '++c"''!BGG9,ErJD??40 0 H %++DBFFOR@D??4"'': : I &!(266"2DNN2664JK K G $(%hrww&78%hrww&78 I &++eBGG9AbhhZ,H"MD??40 0 G $"4>>"''#:DNN277>"''*D>>"''*Dtyy499,djj4::.EF F6../r"66uA/sN.c xtt|}|D] }t|tt|}"|SrE)rrr)rrrarrs r"r@z%NltkDrtBoxerDrsInterpreter._make_atoms?%htn5 C,,Xc];E  r$c|jrZ|jN|jr|d|jzz }|d|jzz }|dt|jdzz }|S)Nz_%sz_s%sz_w%sr)rArr9sortedr)rbaser>s r"rGz.NltkDrtBoxerDrsInterpreter._add_occur_indexingsc   !:// FR]]* *D FVBOO4Q77 7D r$Nr)rrrr#r=r@rGrFr$r"rrs('7Rr$rc eZdZy)UnparseableInputExceptionN)rrrrFr$r"rMrMsr$rM__main__zusage: %prog TEXT [options]z --verbosez-vzdisplay verbose logs store_trueFr )helpactiondefaultdestz--folz-fz output FOLfolz --questionz-qzinput is a questionr:z--occurz-ozoccurrence indexrBrzincorrect number of arguments)rBz\n)r:r )CrrKr+rprrl functoolsroptparsernltk.internalsr nltk.sem.drtrrr r r r r rrnltk.sem.logicrrrrrrryrrQrrrrrrJr_rFrmr r<rr6rMropts add_option parse_argsoptionsrarJerrorrB interpreterr?rr:r rirsimplifyeliminate_equalityrT normalize pretty_printrFr$r"rds* !&   RYRYjO*9O*dDTYDTN""J8)8)v)):!#!H1 1h00f%|%P' 'Tl8 6"l"J3|3l ;;|   z 5 6DOO #   OOLuSX OO "   OO   oo'OWd 4yA~ 23,9L9LMK   , , Q ew'7'7 - C { d lln//1 ;; #'')%%' (    [r$