grammar = nltk.CFG.fromstring("""
S -> NP VP Q |Q NP VP|
NP -> Det N | Det N PP
VP -> V NP | V NP PP
PP -> P NP
NP -> 'I'
N -> 'man' | 'park' | 'telescope' | 'dog'|'car'
Det -> 'the' | 'a'
P -> 'in' | 'with'
V -> 'saw'
Q ->'As'|null
""")
sent = 'I saw a car in the park'.split()
parser = nltk.ChartParser(grammar, trace=2)
t= parser.parse(sent)
for tree in t:
#print(tree)
tree.draw()
在上面的句子中'As'是可选的。如何在nltk语法中写入null或lambda?
答案 0 :(得分:1)
假设我们将Q
分解为 null 以及所有其余的Qx
。然后,您可以将S
的规则重新编写为:
S - > Qx NP VP | NP VP Qx | NP VP
根本不需要Q
。
事实上,除非您需要接受空字符串,否则任何CFG都可以转换为没有“null”。