% Sentence rules % :- multifile best_parse_cats/1, rule/2. :- dynamic best_parse_cats/1, rule/2. % Best Parse Categories best_parse_cats([s,sbar,relc,nfvp,nfvpcore,fvp,np,pp]). % %% S -> NP FVP rule(s(sem:Event^Agent^[NPSem,VPSem,[lsubj,Event,Agent]]), [np(person:P,number:N,sem:Agent^NPSem), fvp(voice:active,person:P,number:N,sem:Event^VPSem)]). %% Brill tagger tags subject demonstrative pronouns as DT's %% S -> DT(this/these) FVP rule(s(sem:Event^Subj^[[pronoun,Subj,R],[number,Subj,DN],VPSem, [realisation,Subj,Edge],[lsubj,Event,Subj]]), [dmp(edge:Edge,m_root:R,number:DN), fvp(voice:active,person:P,number:N,sem:Event^VPSem)]). rule(dmp(s_form:F,number:sing,m_root:'this'), [dt(s_form:F,m_root:'this')]). rule(dmp(s_form:F,number:plural,m_root:'these'), [dt(s_form:F,m_root:'these')]). %% S -> NP passive-VP rule(s(sem:Event^Agent^[NPSem,VPSem,[lobj,Event,Agent]]), [np(person:P,number:N,sem:Agent^NPSem), fvp(voice:passive,person:P,number:N,sem:Event^VPSem)]). %% S -> SBAR , S % After leaving Sheffield, Kevin became rich. rule(s(sem:E2^Agent^[SSem,SBAR,[lsubj,E1,Agent]]), [sbar(sem:E1^SBAR,vform:gform), comma(_), s(sem:E2^Agent^SSem) ]). % Though envied by his friends, Kevin became rich. rule(s(sem:E2^Agent^[SSem,SBAR,[lobj,E1,Agent]]), [sbar(sem:E1^SBAR,vform:nform), comma(_), s(sem:E2^Agent^SSem) ]). % Though Kevin left Sheffield, he became rich rule(s(sem:E2^Agent^[SSem,SBAR]), [sbar(sem:SBAR), comma(_), s(sem:E2^Agent^SSem) ]). %% S -> NP, SBAR , VP % Kevin, after leaving Sheffield, became rich. rule(s(sem:E2^Agent^[NPSem,VPSem,SBAR,[lsubj,E1,Agent],[lsubj,E2,Agent]]), [np(person:P,number:N,sem:Agent^NPSem), comma(_), sbar(sem:E1^SBAR,vform:gform), comma(_), fvp(voice:active,person:P,number:N,sem:E2^VPSem) ]). % Kevin, though envied by his friends, became rich. rule(s(sem:E2^Agent^[NPSem,VPSem,SBAR,[lobj,E1,Agent],[lsubj,E2,Agent]]), [np(person:P,number:N,sem:Agent^NPSem), comma(_), sbar(sem:E1^SBAR,vform:nform), comma(_), fvp(voice:active,person:P,number:N,sem:E2^VPSem) ]). % Kevin, though he left Sheffield, became rich. rule(s(sem:Event^Agent^[NPSem,VPSem,SBAR,[lsubj,Event,Agent]]), [np(person:P,number:N,sem:Agent^NPSem), comma(_), sbar(sem:SBAR), comma(_), fvp(voice:active,person:P,number:N,sem:Event^VPSem) ]). %% S -> NP, SBAR , VP % Kevin, after leaving Sheffield, was knighted. rule(s(sem:E2^Agent^[NPSem,VPSem,SBAR,[lsubj,E1,Agent],[lobj,E2,Agent]]), [np(person:P,number:N,sem:Agent^NPSem), comma(_), sbar(sem:E1^SBAR,vform:gform), comma(_), fvp(voice:passive,person:P,number:N,sem:E2^VPSem) ]). % Kevin, though envied by his friends, was knighted. rule(s(sem:E2^Agent^[NPSem,VPSem,SBAR,[lobj,E1,Agent],[lobj,E2,Agent]]), [np(person:P,number:N,sem:Agent^NPSem), comma(_), sbar(sem:E1^SBAR,vform:nform), comma(_), fvp(voice:passive,person:P,number:N,sem:E2^VPSem) ]). % Kevin, though he left Sheffield, was knighted. rule(s(sem:Event^Agent^[NPSem,VPSem,SBAR,[lobj,Event,Agent]]), [np(person:P,number:N,sem:Agent^NPSem), comma(_), sbar(sem:SBAR), comma(_), fvp(voice:passive,person:P,number:N,sem:Event^VPSem) ]). %% S -> S, SBAR % Kevin became rich, after leaving Sheffield. rule(s(sem:E2^Agent^[SSem,SBAR,[lsubj,E1,Agent]]), [s(sem:E2^Agent^SSem), comma(_), sbar(sem:E1^SBAR,vform:gform) ]). % Kevin became rich, though envied by his friends. rule(s(sem:E2^Agent^[SSem,SBAR,[lobj,E1,Agent]]), [s(sem:E2^Agent^SSem), comma(_), sbar(sem:E1^SBAR,vform:nform) ]). % Kevin became rich, though he left Sheffield. rule(s(sem:E2^Agent^[SSem,SBAR]), [s(sem:E2^Agent^SSem), comma(_), sbar(sem:SBAR) ]). %% S -> Q %rule(s(sem:QSem), % [q(sem:QSem)]). % SBAR rules %% SBAR -> SUBORD S %rule(sbar(sem:E2^E^[[R,E2,E],[event,E2]], Sen]), rule(sbar(sem:E2^E^[[R,E2,E]|Sen]), [subord(m_root:R), s(sem:E^Sen)]). %% SBAR -> SUBORD NFVP(vform:gform) % since leaving the country rule(sbar(sem:E2^E^[[R,E2,E]|VSem],vform:gform), [subord(m_root:R), nfvp(vform:gform,sem:E^VSem)]). %% SBAR -> SUBORD NFVP(vform:nform) % though defeated by his enemies rule(sbar(sem:E2^E^[[R,E2,E]|VSem],vform:nform), [subord(m_root:R), nfvp(vform:nform,sem:E^VSem)]). rule(subord(m_root:'that'), [in(m_root:'that')]). rule(subord(m_root:'because'), [in(m_root:'because')]). rule(subord(m_root:'by'), [in(m_root:'by')]). rule(subord(m_root:'since'), [in(m_root:'since')]). rule(subord(m_root:'if'), [in(m_root:'if')]). rule(subord(m_root:'while'), [in(m_root:'while')]). rule(subord(m_root:'though'), [in(m_root:'though')]). rule(subord(m_root:'as'), [in(m_root:'as')]). rule(subord(m_root:'whether'), [in(m_root:'whether')]). rule(subord(m_root:'although'), [in(m_root:'although')]). rule(subord(m_root:'after'), [in(m_root:'after')]). rule(subord(m_root:'before'), [in(m_root:'before')]). rule(subord(m_root:'on'), [in(m_root:'on')]). rule(subord(m_root:'upon'), [in(m_root:'upon')]). rule(subord(m_root:'when'), [wrb(m_root:'when')]). rule(subord(m_root:'where'), [wrb(m_root:'where')]). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%% rules which may have an S as an object %only certain verbs take sententential complements. These %need to be explicitly marked strans here. %consider using vpcore here prevents passive sentences like %It was said by John "go to the store". rule(vp_strans(person:P,number:N,tense:T,voice:V, sem:S), [vpcore(m_root:say,person:P,number:N,tense:T,voice:V,sem:S)]). %% VP -> VP_STRANS S rule(vp(edge:Edge,person:P,number:N,tense:T,voice:V, sem:E^X^[VSem,[lobj,E,X],NPSem,[realisation,E,Edge]]), [vp_strans(person:P,number:N,tense:T,voice:V,sem:E^VSem), s(sem:X^NPSem)]). %% VP -> VPCORE SUBORD("that") S rule(vp(edge:Edge,person:P,number:N,tense:T,voice:V, sem:E^E2^[VSem,SSem,[proposition,E2], [main_event,E2,E],[realisation,E,Edge]]), [vpcore(person:P,number:N,tense:T,voice:V,sem:E^VSem), subord(m_root:'that'), s(sem:E2^SSem)]). %said "Sent" rule(vp(edge:Edge,person:P,number:N,tense:T,voice:V, sem:E^E2^[VSem,SSem,[proposition,E2], [main_event,E2,E],[realisation,E,Edge]]), [vp_strans(person:P,number:N,tense:T,voice:V,sem:E^VSem), sym(s_form:'``'), s(sem:E2^SSem), sym(s_form:'\'\'') ]). %"Sent" said John rule(s(edge:Edge,person:P,number:N,tense:T,voice:V, sem:E^E2^Agent^[SSem,VSem,NPSem,[lsubj,E,Agent],[proposition,E2], [main_event,E2,E],[realisation,E,Edge]]), [sym(s_form:'``'), s(sem:E2^SSem), sym(s_form:'\'\''), vp_strans(person:P,number:N,tense:T,voice:V,sem:E^VSem), np(person:P,number:N,sem:Agent^NPSem) ]). %"Sent," said John rule(s(edge:Edge,person:P,number:N,tense:T,voice:V, sem:E^E2^Agent^[SSem,VSem,NPSem,[lsubj,E,Agent],[proposition,E2], [main_event,E2,E],[realisation,E,Edge]]), [sym(s_form:'``'), s(sem:E2^SSem), comma(s_form:','), sym(s_form:'\'\''), vp_strans(person:P,number:N,tense:T,voice:V,sem:E^VSem), np(person:P,number:N,sem:Agent^NPSem) ]). %"Sent" John said rule(s(edge:Edge,person:P,number:N,tense:T,voice:V, sem:E^E2^Agent^[SSem,NPSem,VSem,[lsubj,E,Agent],[proposition,E2], [main_event,E2,E],[realisation,E,Edge]]), [sym(s_form:'``'), s(sem:E2^SSem), sym(s_form:'\'\''), np(person:P,number:N,sem:Agent^NPSem), vp_strans(person:P,number:N,tense:T,voice:V,sem:E^VSem) ]). %"Sent," John said rule(s(edge:Edge,person:P,number:N,tense:T,voice:V, sem:E^E2^Agent^[SSem,NPSem,VSem,[lsubj,E,Agent],[proposition,E2], [main_event,E2,E],[realisation,E,Edge]]), [sym(s_form:'``'), s(sem:E2^SSem), comma(s_form:','), sym(s_form:'\'\''), np(person:P,number:N,sem:Agent^NPSem), vp_strans(person:P,number:N,tense:T,voice:V,sem:E^VSem) ]).