下面的代码是Python上NLTK的上下文无关语法。在
%start S
#Feature based context-free grammar
#Base start is sentence
S[SEM=<?vp(?np)>] -> NP[NUM=?n, SEM=?np] VP[NUM=?n,SEM=?vp]
#Verb phrase expansion products
VP[NUM=?n,SEM=?v] -> LV[NUM=?n] NP[SEM=?v]
VP[NUM=?n,SEM=<?v(?obj)>] -> TV[NUM=?n,SEM=?v] NP[SEM=?obj]
#Noun phrase expansion products
NP[SEM=<?conj(?np1,?np2)>] -> NP[SEM=?np1] CC[SEM=?conj] NP[SEM=?np2]
NP[NUM=?n] -> Ger N[NUM=?n]
NP[NUM=?n, SEM=?np] -> N[NUM=?n, SEM=?np]
NP[NUM=?n, SEM=<?adj(?np)>] -> ADJ[SEM=?adj] N[NUM=?n, SEM=?np]
#Following expansion is shorthand for substantive adjective
NP[SEM=?np] -> Adj[SEM=?np]
#Lexical productions
Ger -> 'smoking'
N[NUM=sg, SEM=<\P.P(cocaine)>] -> 'gum'
N[NUM=sg, SEM=<\P.P(sh$%)>] -> 'bad'
LV[NUM=sg] -> 'is'
LV[NUM=pl] -> 'are'
ADJ[SEM=<\x.pretty(x)>] -> 'pretty'
这段代码成功地解析了“gum is bad”和“gum is pretty”这两个句子,但我要让它做的是解析“gum is pretty bad”这句话。它无法解析这个句子,我也不知道为什么。我有种感觉
^{pr2}$
不知道你有什么问题。我把你的语法粘贴到
SOgrammar.fcfg
代码:输出:
^{pr2}$它能解析“口香糖很糟糕”。 它不解析“gum is pretty”,因为pretty被定义为一个形容词。根据你的语法,NP不能只由形容词组成。在
补充评论;从语言学的角度来看,“漂亮”并不是真正的形容词。“bad”不是一个真正的名词。根据你想要达到的目标,这可能并不重要(如果你的语法/领域真的很小),但是当你开始写更大的语法时,坚持使用有更多/更好的语言动机的单词类型是个好主意。在
相关问题 更多 >
编程相关推荐