JL ir,ddlZddlmZddlZddlmZddlmZmZddl m Z m Z m Z m Z mZddlmZmZmZmZdddd d dd Zgd ZGd dZGddeZGddZGddeZGddeZGddeZddZedk(reyy)N)chain)Counter)drt linearlogic)AbstractVariableExpression ExpressionLambdaExpressionVariableVariableExpression) BigramTagger RegexpTagger TrigramTagger UnigramTaggerex_quant univ_quantdef_artno_quant)aaneverythenodefault)nmodvmodpunctcXeZdZddZdZdZdZdZddZdZ d Z d Z d Z d Z d Zy) GlueFormulaNc|s t}t|trtj||_n3t|tr||_nt d|d|jt|tr0tjj||_ ||_ yt|tjr||_ ||_ yt d|d|jNz+Meaning term neither string or expression: , z(Glue term neither string or expression: ) set isinstancestrr fromstringmeaning RuntimeError __class__rLinearLogicParserparseglueindicesselfr&r+r,s S/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/nltk/sem/glue.py__init__zGlueFormula.__init__%seG gs #%009DL  ,"DLG--/  dC #557==dCDI k44 5DI ) c|j|jzrtjd|d|d|j|jz} tj|j|j|j}|j }|rW|jj jjdddD] }|jtd|z|}"|j j|}|j|||S#tj$r>}tjd|j d|j d|d}~wwxYw)zyself = (\x.(walk x), (subj -o f)) arg = (john , subj) returns ((walk john), f) 'z' applied to 'z'. Indices are not disjoint.Nzv%s) r,rLinearLogicApplicationExceptionApplicationExpressionr+simplifyr& antecedent dependenciesmake_LambdaExpressionr applytor()r.argreturn_indices return_glueearg_meaning_abstracteddepreturn_meanings r/r;zGlueFormula.applyto?sS <<#++ %==D6u,IJ "\\CKK7N %;; 388S[[K"% yy))+66CC" *.)C)CUS[)+A*&  --.DE~~nk>JJ:: ==DMMO$N3<<>2B!D  s5DE)+9E$$E)ct|SN)r r.names r/make_VariableExpressionz#GlueFormula.make_VariableExpression`s !$''r1ct||SrD)r r.variableterms r/r:z!GlueFormula.make_LambdaExpressioncs$//r1c.t|tsJt|jtsJ|j |j |jj |jtj|j|jSrD) r#rr&rr(r:rJr ImpExpressionr+r.others r/lambda_abstractzGlueFormula.lambda_abstractfsn%---%--)CDDD~~  & &u}}'='=t|| L  % %ejj$)) <  r1c|s t}|jjj||j\}}||j |j ||j hgzS)z)From Iddo Lev's PhD Dissertation p108-109)rr+r7 compile_posr(r&get)r.counter compiled_glue new_formss r/compilezGlueFormula.compilensgiG%)YY%7%7%9%E%E T^^& "  NN4<< H   r1c|j|jj|jj|jSrD)r(r&r7r+r,r.s r/r7zGlueFormula.simplifyys8~~ LL ! ! #TYY%7%7%94<<  r1c|j|jk(xr4|j|jk(xr|j|jk(SrD)r(r&r+rNs r/__eq__zGlueFormula.__eq__~sA NNeoo - (  - ( UZZ' r1c||k( SrDrNs r/__ne__zGlueFormula.__ne__s5=  r1c0t|t|kSrDr$rNs r/__lt__zGlueFormula.__lt__s4y3u:%%r1ct|jtsJ|jd|j}|jr4|ddj dt |jDzdzz }|S)N : z : {r!c32K|]}t|ywrDr`).0indexs r/ z&GlueFormula.__str__..s"P%3u:"Ps})r#r,r"r&r+joinsorted)r.accums r/__str__zGlueFormula.__str__sl$,,,,,<<.DII;/ << "P6$,,;O"PPPSVV E r1c d|zS)N%sr]rYs r/__repr__zGlueFormula.__repr__s d{r1rD)__name__ __module__ __qualname__r0r;rGr:rPrWr7r[r^rarlror]r1r/rr$s@4KB(0     !&r1rcleZdZddZddZdZddZdZdZdZ d Z d Z d Z d Z d ZdZdZdZy)GlueDictNc@||_||_|jyrD)filename file_encoding read_file)r.rvencodings r/r0zGlueDict.__init__s  % r1c|r|j tjj|jd|j }|j}|D]a}|j}t|s |ddk(r)|jdd}g}d}d} d} d} t|dkDrt|dD]y\} } | d k(r|dk(r| dz} |dz }| d k(r2|dz}|dk(s+|d| | }|d| dz| }|j||gR| d k(r |dk(s]| } `| dk(sf|dk7rtd |znt|dkDrb|djd dz}|djd}||k(r t} n'td|d||jd D} |djd }|djd }|dd|j}|d|dz|}||vri||<| {|rQ||D]G}|||vrg|||<|||}|||j!||||j!|Id||vrg||d<||dj!|| ||vrg||| <|r||| j!||| ||| j!|dy#t $rU} tjjd|jzd|j }n#t $r|wxYwYd}~d}~wwxYw#|dj}d}YJxYw)Ntext)formatryzfile:r#rc(),z&Formula syntax is incorrect for entry []c3<K|]}|jywrD)strip)rers r/rgz%GlueDict.read_file..s.&' .s)clearnltkdataloadrvrw LookupError splitlinesrlensplit enumerateappendr'rf frozensetextend)r. empty_firstcontentsr?lineslineparts glue_formulas paren_count tuple_start tuple_comma relationshipsic meaning_term glue_term rel_startrel_endstart_inheritanceend_inheritancesem supertyperelsr+s r/rxzGlueDict.read_files  JJL yy~~ ft7I7I&H##%a D::>dmm+FTEWEW*   R !Ahnn& s66K*A L# L  9LL LLL #L=cd}|D]r}d|z}||D]c}d}|||D]T}|dk(r ||dzz }n|dt|dzzz }|d|zz }|r|t|||k(r|d|zz }|dz }|dz }Vet|S) Nrnrz:  r~z : %s )r)r.rkposstr_posrelsetrgfs r/rlzGlueDict.__str__s CSjGs) s)F+ BAv4/G q(8!99TBY&E!s49V+<'="=6!11TMEFA    r1c |l|jd}ttj|dj }|j|d}|j ||t |S|j|||}tj|dj D]4} |j| } |j|j || ||6|S)Nrdeps) nodeslistr from_iterablevaluesto_glueformula_listrlookupr) r.depgraphnoderTverbosetopdepListroot glueformulasdep_idxrAs r/rzGlueDict.to_glueformula_list&s <..#C5..s6{/A/A/CDEG>>'!*-D++HdGIwO O{{47; **4<+>+>+@A G..)C   ((3I   r1c  |j|}d}|D] }||vs||}n|gS|j|||j|||}t|st d|dd|dd|dd|j ||d|||S)Nz,There is no GlueDict entry for sem type of 'wordz ' with tag 'tagz ', and rel 'relr3) get_semtypesadd_missing_dependencies_lookup_semtype_optionrKeyError#get_glueformulas_from_semtype_entry)r.rrrT semtype_namessemtyperFrs r/rzGlueDict.lookup7s))$/ ! Dt|t*  ?I %%dH5,,WdHE6{15ftE{DQVKY  77 DL$'  r1c|dj}|dk(rZ|j|d}|jd||}|d}|dj|g|d|j |dyy)Nrmainheadsubjraddress)lowerr lookup_unique setdefaultr)r.rrrheadnoderrelations r/rz!GlueDict.add_missing_dependenciesQs~5k! &=~~d6l3H%%fhADE{H L # #Hb 1 L " ) )$y/ : r1c@tfdtj|djD} ||}|S#t$rRt}t |dhz D]"}t |t |kDs||ks!|}$|s d|vrd}nYy||}Y|SwxYw)Nc3K|]J}j|djtvr"j|djLyw)rN)rrOPTIONAL_RELATIONSHIPS)rerArs r/rgz2GlueDict._lookup_semtype_option..]sP" ~~c"5)//19OO NN3  & , , ." sAAr)rrrrrr"r)r.rrrrr best_match relset_options ` r/rzGlueDict._lookup_semtype_option\s!" **4<+>+>+@A"   )]+F( ' ) #J!$W!6 /  &Z8% 5!.J  / 7?!%JZ(F ' )s#A" :param word: The actual word to be replace "" .rz)replace)r.genericrs r/rzGlueDict.get_meaning_formulas% ||C$x..r1c t|tjri|j|jj |||}|dj rtj|Stj|Stj|j|j||||j|j|||S)Nr) r#rAtomicExpressionfind_label_namerFrisupperr ConstantExpressionrMrr8 consequent)r.exprrr unique_indexrFs r/rzGlueDict.initialize_labelss dK88 9'' (94<XDAw "55d;;"55d;;,,&&th U&&th U r1c |jd}|d|}||dzd}|dk(r$|j||j|d||S|j||j|||||S#t$r|j |}|dk(r|cYS|dk(rd|zcYS|dk(rd |zcYS|dk(r#|j |j|dcYS|d k(r|j |cYS|d k(r$|j |jd ||cYS|d k(r$|j |jd||cYS|j |j|||cYSwxYw)Nrrsuperrfvz%svrz%srvarrconjabconjb)rfrrr ValueError get_labelupper) r.rFrrrdot before_dot after_dotlbls r/rzGlueDict.find_label_names! P**S/CdsJS1WYIW$++x~~d6l;X|++&&z4B   P..&Cs{ s{"s{"~~hnnT&\&BCC))+|n55~~d&8&8$&QRR~~d&8&8$&QRR~~d&8&8tX&NOO# PsBAA. $A..!E# E# E#)&E#E#,'E#'E#>"E#"E#cf|d}gd|dz }t|dz}|dkDr|t|zS|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)rghrjklmnopqrsturwxyzrrrdr?rr)intr$)r.rvalueletternums r/rzGlueDict.get_labelsMY 6 !)78%jB 7CH$ $Mr1ctj|djDcgc]B}|j|dj |j k(r|j|D}}t |dk(rt dj|d|t |dkDrt dj|d||dScc}w)z\ Lookup 'key'. There should be exactly one item in the associated relation. rrrz#'{}' doesn't contain a feature '{}'rrz&'{}' should only have one feature '{}')rrrrrrrr|)r.rrrrArs r/rzGlueDict.lookup_uniques **4<+>+>+@A ~~c"5)//1SYY[@ NN3   t9>5<@RS r1cvg}|j|D]"}|j|j|$|SrD)parse_to_compiledr get_readings)r.sentencereadingsagendas r/parse_to_meaningzGlue.parse_to_meaning9s=,,X6 7F OOD--f5 6 7r1c:g}t|}t}t}|r|j}|jj }t |t jr|D]} t |jt jr|jj} nt j} |jj|| ||D]=} |j| jzr |j|j| ? ||jj|n|D]}||D]} t | jt jr| jj} nt j} |j|| |j| jzs! |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 $rYwxYw#t j"$rYFwxYw#t$$r|g||j<YwxYw#t j $rYwxYw#t j"$rYwxYw#t$$r |g||<YwxYwrD)rdictpopr+r7r#rrMr6bindings BindingDictr8unifyr,rr;r5UnificationExceptionr_add_to_reading_list)r.r/r. agenda_lengthatomics nonatomicscur glue_simpkeyr4atomic nonatomicentryrs r/r,zGlue.get_readings?sF &V **,C))+I;44#C%chh 0Q0QR'*xx'8'8H'2'>'>'@H!,,223A&-cl)F # fnn <!)$*MM#++f2E$F )"=y334;;C@ &!C%/_! !) ) 0Q0Q ,5>>+B+B+6+B+B+D%OOC: # i.?.? ?!)$*MM)2C2CC2H$I!!&/I&--c2cj > ! -'t/B/B/DEDN~~&&  "~~##Hdll#CCr1c@|jj|SrD) get_glue_dictr)r.rs r/rLzGlue.depgraph_to_glues!!#77AAr1c,t|jSrD)rtr!rYs r/rZzGlue.get_glue_dicts))**r1ct}g}|D]"}|j|j|$|jrt d|D] }t ||S)NzCompiled Glue Premises:)rrrWrrE)r.rP index_counter return_listrcgfs r/rMzGlue.gfl_to_compiledsd   :B   rzz-8 9 : << + ," c  r1cddlm}tgd}|jd}t ||}t ||}t ||}tddg|}|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.*renews) categories)backoff)z (A|a|An|an)$r)z(Every|every|All|all)$r) nltk.corpusrar tagged_sentsrr r)r.ra regexp_tagger brown_trainunigram_tagger bigram_taggertrigram_tagger main_taggers r/rWzGlue.get_pos_taggersm%$   ((F(; &{MJ$[.I &{MJ# *,U V" r1NFNFrD)rprqrrr0r)r0r,r8r+rKrLrZrMrWr]r1r/rrs@RW$ BH5";D$B+ r1rc eZdZddZdZdZy)DrtGlueFormulaNc|s t}t|tr%tjj ||_n=t|tjr||_ntd|d|jt|tr0tjj||_ ||_yt|tjr||_ ||_ytd|d|jr )r"r#r$r DrtExpressionr%r&r'r(rr)r*r+rr,r-s r/r0zDrtGlueFormula.__init__seG gs #,,77@DL !2!2 3"DLG--/  dC #557==dCDI k44 5DI ) r1c,tj|SrD)rDrtVariableExpressionrEs r/rGz&DrtGlueFormula.make_VariableExpressions((..r1c.tj||SrD)rDrtLambdaExpressionrIs r/r:z$DrtGlueFormula.make_LambdaExpressions&&x66r1rD)rprqrrr0rGr:r]r1r/rwrws4/7r1rwceZdZdZy) DrtGlueDictctSrD)rwrYs r/rz#DrtGlueDict.get_GlueFormula_factorysr1N)rprqrrrr]r1r/rrsr1rceZdZ ddZdZy)DrtGlueNc||s!tjjddd}tj |||||y)Nrrzdrt_glue.semtype)r"r#rirr0)r.r!rrrs r/r0zDrtGlue.__init__s977<<-/AL dL*;YPr1c,t|jSrD)rr!rYs r/rZzDrtGlue.get_glue_dict s4,,--r1ru)rprqrrr0rZr]r1r/rrsRWQ.r1rcbddlm}gd}tdtgd}||}t |d}t |D]i\}}||k(s|d k(std |d ||j |jD]}t|jtd ky) NrrR)zDavid sees MaryzDavid eats a sandwichzevery man chases a dogzevery man believes a dog sleepszJohn gives David a sandwichzJohn 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)$PRPrTF)rrr4z [[[Example z]]] r) rVrSrEr rrr0rr7) show_examplerSexamplesrUrr+rr-rIs r/demors%H$ ./  F &)I )U 3D * 8   2 Ks%z2 3001AB *g&&() * "I r1__main__)r4)r" itertoolsrrnltk.internalsrnltk.semrrnltk.sem.logicrrr r r nltk.tagr r rrrrrr2rtrrwrrrrpr]r1r/rs  "%NM       3rrj@t@F ||~7[7D( .d ./d zFr1