文档介绍:Chinese Sentence Parser
1
Reference
Chapter 9, W. F. Clocksin and C. S. Mellish, Programming in Prolog, 3rd ed., Springer-Verlag.
2
First Step: A Simple Parser
s --> np, vp.
np --> num, cl, n.
np --> n.
np --> pron.
num --> [W],{word(W,num)}.
cl --> [W],{word(W,cl)}.
n --> [W],{word(W,n)}.
pron --> [W],{word(W,pron)}.
vp --> vi.
vp -->vt,np.
adv --> [W],{word(W,adv)}.
vi --> [W], {word(W,vi)}.
vt --> [W], {word(W,vt)}.
word('張三',n).
word('我',pron).
word('打',vt).
word('很',adv).
word('高興',vi).
word('李四',n).
word('一',num).
word('個',cl).
word('人',n).
a:- s(['張三', '打', '李四'],[]).
b:-s(['我', '打', '李四'],[]).
c:-s(['一', '個', '人', '打', '李四'],[]).
3
First Step: A Simple Parser
s --> np, vp.
np --> num, cl, n.
np --> n.
np --> pron.
num --> [W],{word(W,num)}.
cl --> [W],{word(W,cl)}.
n --> [W],{word(W,n)}.
pron --> [W],{word(W,pron)}.
vp --> adv,vi.
vp -->adv,vt,np.
adv --> [W],{word(W,adv)}.
vi --> [W], {word(W,vi)}.
vt --> [W], {word(W,vt)}.
word('張三',n).
word('我',pron).
word('打',vt).
word('很',adv).
word(‘狠狠的’,adv).
word('高興',vi).
word('李四',n).
word('一',num).
word('個',cl).
word('人',n).
a:- s([‘張三’,‘狠狠的’, '打', '李四'],[]).
b:-s([‘張三’, ‘很’, ‘高興'],[]).
4
First Step: A Simple Parser
s --> np, vp.
np --> num, cl, n.
np --> n.
np --> pron.
num --> [W],{word(W,num)}.
cl --> [W],{word(W,cl)}.
n --> [W],{word(W,n)}.
pron --> [W],{word(W,pron)}.
vp --> (adv;[]),vi.
vp --> (adv;[]),v