ó <¿CVc@ s2dZddlmZmZmZddlZddlmZddlm Z m Z m Z ddl m Z ddlmZddlmZmZmZmZmZmZmZmZmZdd lmZmZd e fd „ƒYZd e fd „ƒYZede fd„ƒYƒZede fd„ƒYƒZ ede fd„ƒYƒZ!eeƒeeƒgZ"eeƒeeƒeeƒgZ#eeƒeeƒgZ$e ƒe!ƒgZ%e"e#e$e%Z&defd„ƒYZ'de fd„ƒYZ(d„Z)d„Z*edƒZ+d„Z,e-dkr.e,ƒndS(uB 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 iÿÿÿÿ(tprint_functiontdivisiontunicode_literalsN(tParserI(tAbstractChartRuletEdgeItChart(tTree(t fromstring( tForwardTt BackwardTtForwardApplicationtBackwardApplicationtForwardCompositiontBackwardCompositiontForwardSubstitutiont BackwardBxt BackwardSx(tpython_2_unicode_compatiblet string_typestCCGEdgecB s}eZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z d „ZRS( cC s1||_||_||_|||f|_dS(N(t_spant_categt_rulet_comparison_key(tselftspantcategtrule((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyt__init__3s   cC s|jS(N(R(R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pytlhs:scC s|jS(N(R(R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyR;scC s |jdS(Ni(R(R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pytstart<scC s |jdS(Ni(R(R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pytend=scC s|jd|jdS(Nii(RR(R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pytlength>scC sdS(N(((R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pytrhs?scC sdS(Ni((R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pytdot@scC stS(N(tTrue(R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyt is_completeAscC stS(N(tFalse(R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyt is_incompleteBscC sdS(N(tNone(R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pytnextsymCscC s|jS(N(R(R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyREscC s|jS(N(R(R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyRFs(t__name__t __module__RRRRR R!R"R#R%R'R)RR(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyR2s            t CCGLeafEdgecB sƒeZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z d „Zd „ZRS(u< Class representing leaf edges in a CCG derivation. cC s1||_||_||_|||f|_dS(N(t_posRt_leafR(RtposRtleaf((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyRLs   cC s|jS(N(R(R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyRSscC s|j|jdfS(Ni(R-(R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyRTscC s|jS(N(R-(R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyRUscC s |jdS(Ni(R-(R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyR VscC sdS(Ni((R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyR!WscC s|jS(N(R.(R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyR"XscC sdS(Ni((R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyR#YscC stS(N(R$(R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyR%ZscC stS(N(R&(R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyR'[scC sdS(N(R((R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyR)\scC s|jS(N(R(R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyR^scC s|jS(N(R.(R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyR0_s(R*R+t__doc__RRRRR R!R"R#R%R'R)RR0(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyR,Hs            tBinaryCombinatorRulecB s/eZdZdZd„Zd„Zd„ZRS(uw Class implementing application of a binary combinator to a chart. Takes the directed combinator to apply. icC s ||_dS(N(t _combinator(Rt combinator((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyRhscc sÀ|jƒ|jƒksdS|jj|jƒ|jƒƒr¼x||jj|jƒ|jƒƒD]V}td|jƒ|jƒfd|d|jƒ}|j|||fƒr_|Vq_q_WndS(NRRR(R RR3t can_combineRtcombineRtinsert(Rtcharttgrammart left_edget right_edgetrestnew_edge((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pytapplyls!(0cC s d|jS(Nu%s(R3(R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyt__str__zs(R*R+R1tNUMEDGESRR>R?(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyR2as   tForwardTypeRaiseRulecB s/eZdZdZd„Zd„Zd„ZRS(u1 Class for applying forward type raising icC s t|_dS(N(R R3(R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyR†scc s|jƒ|jƒksdSxj|jj|jƒ|jƒƒD]G}td|jƒd|d|jƒ}|j||fƒr>|Vq>q>WdS(NRRR(R RR3R6RRRR7(RR8R9R:R;R<R=((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyR>ˆs ($cC s d|jS(Nu%s(R3(R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyR?‘s(R*R+R1R@RR>R?(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyRAs   tBackwardTypeRaiseRulecB s/eZdZdZd„Zd„Zd„ZRS(u3 Class for applying backward type raising. icC s t|_dS(N(R R3(R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyR›scc s|jƒ|jƒksdSxj|jj|jƒ|jƒƒD]G}td|jƒd|d|jƒ}|j||fƒr>|Vq>q>WdS(NRRR(R RR3R6RRRR7(RR8R9R:R;R<R=((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyR>s ($cC s d|jS(Nu%s(R3(R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyR?¦s(R*R+R1R@RR>R?(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyRB”s   tCCGChartParsercB s,eZdZdd„Zd„Zd„ZRS(uV Chart parser for CCGs. Based largely on the ChartParser class from NLTK. icC s||_||_||_dS(N(t_lexicont_rulest_trace(Rtlexicontrulesttrace((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyR½s  cC s|jS(N(RD(R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyRGÂsc C s²t|ƒ}tt|ƒƒ}|j}xht|jƒƒD]T}xK|j|j|ƒƒD]1}t|||j|ƒƒ}|j|dƒqYWq:Wx td|jƒdƒD]ï}xætd|jƒ|dƒD]Ç}x¾td|ƒD]­} |} || } ||} xŠ|j d| | fƒD]p} xg|j d| | fƒD]M}xD|j D]9}d}x*|j ||| |ƒD]}|d7}qsWqNWq>WqWqæWqÐWq¬W|j |j ƒƒS(NiiiR((tlisttCCGChartRDtranget num_leavest categoriesR0R,R7tselectRER>tparsesR(RttokensR8tlextindextcatR=RRtparttlstarttmidtrendtlefttrightRtedges_added_by_ruletnewedge((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pytparseÆs(   $  &(R*R+R1RRGR](((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyRC¸s  RKcB seZd„Zd„ZRS(cC stj||ƒdS(N(RR(RRQ((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pyRèsc C s;|stdƒ‚||kr&||St|tƒrŒ||jƒ|j|jƒgƒ}||jƒdf|gƒ}|g||<|gSg|| 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 cC s=tttƒ}x'|jdjƒƒD]}t|ƒq%WdS(NuI might cook and eat the bacon(RCRRtDefaultRuleSetR]tsplitR~(tparserR]((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pytdemocsu__main__(.R1t __future__RRRRct nltk.parseRtnltk.parse.chartRRRt nltk.treeRtnltk.ccg.lexiconRtnltk.ccg.combinatorR R R R R RRRRt nltk.compatRRRR,R2RARBtApplicationRuleSettCompositionRuleSettSubstitutionRuleSettTypeRaiseRuleSetR‡RCRKR~RsRRRŠR*(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/ccg/chart.pytsD @    /#