JL ia5dZddlZddlddlmZmZmZmZmZmZm Z m Z m Z ddl m Z mZddlddlmZddlmZmZmZddlddlmZGd d eZGd d eZGd deZGddeZGddeZeeeegZee eeeegZee eegZ eegZ!eeze ze!zZ"GddeZ#GddeZ$dZ%dZ&dZ'edZ(dZ)e*dk(re)yy)aB The lexicon is constructed by calling ``lexicon.fromstring()``. In order to construct a parser, you also need a rule set. The standard English rules are provided in chart as ``chart.DefaultRuleSet``. The parser can then be constructed by calling, for example: ``parser = chart.CCGChartParser(, )`` Parsing is then performed by running ``parser.parse(.split())``. While this returns a list of trees, the default representation of the produced trees is not very enlightening, particularly given that it uses the same tree class as the CFG parsers. It is probably better to call: ``chart.printCCGDerivation()`` which should print a nice representation of the derivation. This entire process is shown far more clearly in the demonstration: python chart.py N)*) BackwardApplication BackwardBxBackwardComposition BackwardSx BackwardTForwardApplicationForwardCompositionForwardSubstitutionForwardT)Token fromstring)ParserI)AbstractChartRuleChartEdgeI)TreecZeZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd Zy)CCGEdgecB||_||_||_|||f|_yN)_span_categ_rule_comparison_key)selfspancategrules T/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/nltk/ccg/chart.py__init__zCCGEdge.__init__;s&   $eT2c|jSrrrs r lhsz CCGEdge.lhsB {{r"c|jSrrr%s r rz CCGEdge.spanE zzr"c |jdSNrr)r%s r startz CCGEdge.startHzz!}r"c |jdSNr)r%s r endz CCGEdge.endKr.r"c@|jd|jdz S)Nr1r)rrr%s r lengthzCCGEdge.lengthNszz!}tyy|++r"cy)Nr6r%s r rhsz CCGEdge.rhsQsr"cyr,r6r%s r dotz CCGEdge.dotTr"cyNTr6r%s r is_completezCCGEdge.is_completeWr"cyNFr6r%s r is_incompletezCCGEdge.is_incompleteZr"cyrr6r%s r nextsymzCCGEdge.nextsym]r>r"c|jSrr$r%s r rz CCGEdge.categ`r'r"c|jSr)rr%s r rz CCGEdge.rulecr*r"N)__name__ __module__ __qualname__r!r&rr-r2r4r7r9r=rArDrrr6r"r rr:sC3,r"rcdeZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZy) CCGLeafEdgez< Class representing leaf edges in a CCG derivation. c^||_||_||_||j|f|_yr)_pos_token_leafrr)rpostokenleafs r r!zCCGLeafEdge.__init__ls,   #U[[]D9r"c6|jjSrrNrr%s r r&zCCGLeafEdge.lhss{{  ""r"c8|j|jdzfSr0rMr%s r rzCCGLeafEdge.spanvs 499q=))r"c|jSrrWr%s r r-zCCGLeafEdge.startys yyr"c |jdzSr0rWr%s r r2zCCGLeafEdge.end|syy1}r"cyr0r6r%s r r4zCCGLeafEdge.lengthr:r"c|jSrrOr%s r r7zCCGLeafEdge.rhsr*r"cyr,r6r%s r r9zCCGLeafEdge.dotr:r"cyr<r6r%s r r=zCCGLeafEdge.is_completer>r"cyr@r6r%s r rAzCCGLeafEdge.is_incompleterBr"cyrr6r%s r rDzCCGLeafEdge.nextsymr>r"c|jSr)rNr%s r rQzCCGLeafEdge.tokenr'r"c6|jjSrrTr%s r rzCCGLeafEdge.categrUr"c|jSrr\r%s r rRzCCGLeafEdge.leafr*r"N)rGrHrI__doc__r!r&rr-r2r4r7r9r=rArDrQrrRr6r"r rKrKgsM:#*#r"rKc&eZdZdZdZdZdZdZy)BinaryCombinatorRulezw Class implementing application of a binary combinator to a chart. Takes the directed combinator to apply. c||_yr _combinator)r combinators r r!zBinaryCombinatorRule.__init__s %r"c#K|j|jk(sy|jj|j |j r|jj |j |j D]Q}t |j|jf||j}|j|||fsN|SyywN)rrr)r2r-rj can_combinercombinerinsertrchartgrammar left_edge right_edgeresnew_edges r applyzBinaryCombinatorRule.applys :#3#3#55     ' ' (9:;K;K;M N''// 0A:CSCSCUV #"#//+Z^^-=>)) <<9j*AB"N # Os C C+#C+c d|jzSN%srir%s r __str__zBinaryCombinatorRule.__str__d&&&&r"NrGrHrIrdNUMEDGESr!rxr|r6r"r rfrfs H&#$'r"rfc&eZdZdZdZdZdZdZy)ForwardTypeRaiseRulez1 Class for applying forward type raising rgct|_yr)r rjr%s r r!zForwardTypeRaiseRule.__init__s #r"c#FK|j|jk(sy|jj|j |j D]@}t |j ||j}|j||fs=|Bywrmr2r-rjrorrrrprqs r rxzForwardTypeRaiseRule.applys :#3#3#55 ##++IOO,=z?O?O?QR CINN$4CdFVFVWH||Hyl3  BB!B!c d|jzSrzrir%s r r|zForwardTypeRaiseRule.__str__r}r"Nr~r6r"r rrsH$'r"rc&eZdZdZdZdZdZdZy)BackwardTypeRaiseRulez3 Class for applying backward type raising. rgct|_yr)rrjr%s r r!zBackwardTypeRaiseRule.__init__s $r"c#FK|j|jk(sy|jj|j |j D]@}t |j ||j}|j||fs=|Bywrmrrqs r rxzBackwardTypeRaiseRule.applys :#3#3#55 ##++IOO,=z?O?O?QR CJOO$5StGWGWXH||Hzm4 rc d|jzSrzrir%s r r|zBackwardTypeRaiseRule.__str__r}r"Nr~r6r"r rrsH%'r"rc$eZdZdZddZdZdZy)CCGChartParserzV Chart parser for CCGs. Based largely on the ChartParser class from NLTK. c.||_||_||_yr)_lexicon_rules_trace)rlexiconrulestraces r r!zCCGChartParser.__init__ s   r"c|jSr)rr%s r rzCCGChartParser.lexicons }}r"c t|}tt|}|j}t|j D]U}|j |j |D]0}t|||j |}|j|d2Wtd|j dzD]}td|j |z dzD]}td|D]q} |} || z} ||z} |j| | fD]L} |j| | fD]3}|jD]"}d}|j||| |D]}|dz } $5Ns|j|jS)Nr6rgr1r)r)listCCGChartrrange num_leaves categoriesrRrKrpselectrrxparsesr-)rtokensrrlexindexrQrwrr-partlstartmidrendleftrightredges_added_by_rulenewedges r parsezCCGChartParser.parsesff&mm5++-. +E 5(9: +&ueUZZ5FG Xr* + + !U--/!34 =Dq%"2"2"4t";a"?@ ="!TN =D"F$,C 4->-@-C-M-M-OPPr"c|j}d}d}|D]\}}d|z}dtt|t|z}|t|z dz}||t|z dzz} |d|z|zd| zzz }|t|z dz} | |t|z dzz} |d| z|zd| zzz }t|j t|j t d|y)Nr{rg r)rPmaxrprintrstrip printCCGTree) treeleafcatsleafstrcatstrrRcatstr_catnextlenlcatlenrcatlenlleaflenrleaflens r printCCGDerivationrwsxxzHG F: c*c#d)S\22S\)a/Ws7|3q88#-')C'M99c$i'A-wT2a773>D(3>99: '..  &--/Dr"c |}t|tsd|zt|zS|D]}t|t ||}t|j t s?t|d|ztd|j zzd|zt|dzS|j \}}|dk(r|St|dz||z dzzd|zzd|jz}|j"|dt|jzdzz }||z t|z dz|z}t|dz|z|S) Nrgr{rrr-z {}) rrrrrrtuplerrrr)lwidthrrwidthchildrQopstr_res respadlens r rrsL F dD !6zCI%%:V\&%89: djjlE * AJTDJJL%8!991v:DQRG ;T  **,KUB V|  &3,&6/S0 04"9 <=ekkm$G $4#eoo/00366&3w</A5>I )c/G #$ Mr"ar :- S, NP, N, VP # Primitive categories, S is the target primitive Det :: NP/N # Family of words Pro :: NP TV :: VP/NP Modal :: (S\NP)/VP # Backslashes need to be escaped I => Pro # Word -> Category mapping you => Pro the => Det # Variables have the special keyword 'var' # '.' prevents permutation # ',' prevents composition and => var\.,var/.,var which => (N\N)/(S/NP) will => Modal # Categories can be either explicit, or families. might => Modal cook => TV eat => TV mushrooms => N parsnips => N bacon => N cttt}|jdj D] }t |y)NzI might cook and eat the bacon)rrDefaultRuleSetrsplitr)parserrs r demors8 C 0F>DDFG"5!"r"__main__)+rdrnltk.ccg.combinatorrrrrrr r r r nltk.ccg.lexiconr rnltk.ccg.logic nltk.parsernltk.parse.chartrrrnltk.sem.logic nltk.treerrrKrfrrApplicationRuleSetCompositionRuleSetSubstitutionRuleSetTypeRaiseRuleSetrrrrrrrrrGr6r"r rs[2!   /<< *e*Z1%1h','L','.'-'2+,,- +,,-$ ,-$)*,A,CD++.AADTT -)W-)`$u$NQ62!ND"  zFr"