/* ------------------------------------------------------------------------- PP|NP ... switch *to* bass ... ... walked away *from* the project ... ------------------------------------------------------------------------- */ semlex(pp/np,Sym,Index,Att1-[sem:'AND'|Att2],Sem):- option('--roles',verbnet), roles(Sym,pp/np,[Role],Att1-Att2), !, Sem = lam(Q,lam(X,app(Q,lam(Y,B:drs([],[B:Index:role(X,Y,Role,1)]))))). semlex(pp/np,Sym,Index,Att-[sem:'AND'|Att],Sem):- !, Sem = lam(Q,lam(X,app(Q,lam(Y,B:drs([],[B:Index:rel(X,Y,Sym,0)]))))). /* ------------------------------------------------------------------------- PP|N ------------------------------------------------------------------------- */ semlex(pp/n,Sym,Index,Att-[sem:'UOM'|Att],Sem):- att(Att,pos,'$'), !, Sem = lam(N,lam(X,merge(B:drs([B:[]:Y],[B:Index:pred(Y,Sym,n,1),B:[]:rel(X,Y,rel,0)]), app(N,Y)))). semlex(pp/n,Sym,Index,Att-[sem:'AND'|Att],Sem):- !, Sem = lam(N,lam(X,merge(B:drs([B:[]:Y],[B:Index:rel(X,Y,Sym,0)]),app(N,Y)))). /* ------------------------------------------------------------------------- PP/VP[ng] ... succeeded *in* freeing ... ... suspected *of* using ... ... refrained *from* opening ... ... limited *to* providing ... ------------------------------------------------------------------------- */ semlex(pp/(s:ng\np),Sym,Index,Att1-[sem:'SUB'|Att2],Sem):- roles(Sym,pp/(s:ng\np),[Role],Att1-Att2), !, plosing(CC), NP = lam(P,merge(B2:drs([B2:[]:Y],[]),app(P,Y))), Sem = lam(VP,lam(E,B1:drs([B1:[]:P],[B1:Index:role(E,P,Role,1), B1:[]:prop(P,app(app(VP,NP),CC))]))). /* ------------------------------------------------------------------------- PP/VP[adj] ------------------------------------------------------------------------- */ semlex(pp/(s:adj\np),Sym,Index,Att1-[sem:'AND'|Att2],Sem):- roles(Sym,(s:adj\np),[Role],Att1-Att2), !, Sem = lam(VP,lam(X,app(app(VP,lam(P,merge(B:drs([B:[]:Y],[]),app(P,Y)))), lam(E,C:drs([],[C:Index:role(X,E,Role,1)]))))). semlex(pp/(s:b\np),Sym,Index,Att1-[sem:'AND'|Att2],Sem):- roles(Sym,pp/(s:b\np),[Role],Att1-Att2), !, Sem = lam(VP,lam(X,app(app(VP,lam(P,merge(B:drs([B:[]:Y],[]),app(P,Y)))), lam(E,C:drs([],[C:Index:role(X,E,Role,1)]))))). semlex(pp/(s:_\np),Sym,Index,Att-[sem:'AND'|Att],Sem):- !, Sem = lam(VP,lam(X,app(app(VP,lam(P,merge(B:drs([B:[]:Y],[]),app(P,Y)))), lam(E,C:drs([],[C:Index:rel(X,E,Sym,0)]))))). % Prep + NP + VP (... results in shareholders receiving ...) % semlex((pp/(s:_\np))/np,Sym,Index,Att-[sem:'AND'|Att],Sem):- !, Sem = lam(NP,lam(VP,lam(E,app(app(VP,NP),lam(F,B:drs([],[B:Index:rel(E,F,Sym,0)])))))). semlex(pp/s:_,Sym,Index,Att1-[sem:'SUB'|Att2],Sem):- roles(Sym,pp/s:_,[Role],Att1-Att2), !, Sem = lam(S,lam(E,app(S,lam(X,B:drs([],[B:Index:role(E,X,Role,1)]))))). semlex(pp/s,Sym,Index,Att1-[sem:'SUB'|Att2],Sem):- roles(Sym,pp/s,[Role],Att1-Att2), !, Sem = lam(S,lam(E,app(S,lam(X,B:drs([],[B:Index:role(E,X,Role,1)]))))). semlex(pp/s:_,Sym,Index,Att-[sem:'AND'|Att],Sem):- !, Sem = lam(S,lam(E,app(S,lam(X,B:drs([],[B:Index:rel(E,X,Sym,0)]))))). semlex(pp/s,Sym,Index,Att-[sem:'AND'|Att],Sem):- !, Sem = lam(S,lam(E,app(S,lam(X,B:drs([],[B:Index:rel(E,X,Sym,0)]))))). /* ------------------------------------------------------------------------- (pp|np)|np ------------------------------------------------------------------------- */ semlex((pp\np)/np,Sym,Index,Att-[sem:'AND'|Att],Sem):- !, Sem = lam(Q1,lam(Q2,lam(X,merge(app(Q2,lam(Z,B1:drs([],[B1:[]:rel(X,Z,rel,0)]))), app(Q1,lam(Y,B2:drs([],[B2:Index:rel(X,Y,Sym,0)]))))))). /* ------------------------------------------------------------------------- PP modifiers ------------------------------------------------------------------------- */ semlex(Cat,Sym,Index,Att-[sem:'NOT'|Att],Sem):- option('--semantics',drg), notSymbol(Sym), member(Cat,[pp/pp,pp\pp]), !, Sem = lam(P,lam(E,B:drs([],[B:Index:pred(E,Sym,s,1),B:[]:not(app(P,E))]))). semlex(Cat,Sym,Index,Att-[sem:'NOT'|Att],Sem):- notSymbol(Sym), member(Cat,[pp/pp,pp\pp]), !, Sem = lam(P,lam(E,B:drs([],[B:Index:not(app(P,E))]))). semlex(Cat,Sym,Index,Att-[sem:'AND'|Att],Sem):- member(Cat,[pp/pp,pp\pp]), !, att(Att,sense,Sense), Sem = lam(P,lam(E,merge(app(P,E), B:drs([],[B:Index:pred(E,Sym,r,Sense)])))). semlex(Cat,Sym,Index,Att-[sem:'AND'|Att],Sem):- member(Cat,[(pp\pp)\np, (pp\pp)/np, (pp/pp)/np]), !, Sem = lam(NP,lam(P,lam(E,merge(app(P,E), app(NP,lam(X,B:drs([],[B:Index:rel(E,X,Sym,0)]))))))). semlex(Cat,Sym,Index,Att-[sem:'AND'|Att],Sem):- member(Cat,[(pp\pp)\s:dcl, (pp\pp)/s:dcl, (pp/pp)/s:dcl]), !, Sem = lam(S,lam(P,lam(E,merge(app(P,E), app(S,lam(X,B:drs([],[B:Index:rel(E,X,Sym,0)]))))))). semlex(Cat,Sym,Index,Att-[sem:'NOT'|Att],Sem):- notSymbol(Sym), member(Cat,[(pp\pp)/(pp\pp), (pp/pp)/(pp/pp)]), !, Sem = lam(Z,lam(P,lam(Y,app(app(Z,lam(X,B:drs([],[B:Index:not(app(P,X))]))),Y)))). semlex(Cat,Sym,Index,Att-[sem:'AND'|Att],Sem):- member(Cat,[(pp\pp)/(pp\pp), (pp/pp)/(pp/pp)]), !, att(Att,sense,Sense), Sem = lam(Z,lam(P,lam(Y,app(app(Z,lam(X,merge(B:drs([],[B:Index:pred(X,Sym,r,Sense)]), app(P,X)))),Y)))). /* ------------------------------------------------------------------------- Preposition: the (as in "the week before") ------------------------------------------------------------------------- */ semlex(Cat,the,Index,Att1-[sem:'DEF'|Att2],Sem):- member(Cat,[(pp\pp)/n]), !, role(['Time'],Att1-Att2,[Role]), Sem = lam(N,lam(P,lam(E,merge(app(P,E), alfa(def,merge(B1:drs([B1:[]:X],[]), app(N,X)), B2:drs([],[B2:Index:role(E,X,Role,1)])))))). semlex(Cat,Sym,Index,Att-[sem:'DEF'|Att],Sem):- member(Cat,[(pp\pp)/n]), !, Sem = lam(N,lam(P,lam(E,merge(app(P,E), alfa(def,merge(B1:drs([B1:[]:X],[]), app(N,X)), B2:drs([],[B2:Index:rel(E,X,Sym,0)])))))). /* ------------------------------------------------------------------------- Compound adjectives (actually, the hyphen in compound adjectives) ------------------------------------------------------------------------- */ semlex(pp\n,'-',Index,Att-[sem:'UNK'|Att],Sem):- !, Sem = lam(N,lam(X,alfa(def,merge(B1:drs([B1:[]:Y],[]),app(N,Y)), B2:drs([],[B2:Index:rel(X,Y,loc_rel,0)])))). semlex(pp\n,'-',Index,Att-[sem:'UNK'|Att],Sem):- !, Sem = lam(N,lam(X,merge(B:drs([B:[]:Y],[B:Index:rel(X,Y,rel,0)]), app(N,Y)))). semlex(pp\n,'-',Index,Att-[sem:'UNK'|Att],Sem):- !, Sem = lam(N,lam(X,merge(B:drs([B:[]:Y],[B:Index:rel(X,Y,attribute,0)]), app(N,Y)))).