如何在CFG中定义null或lambda?

时间:2016-03-28 17:33:12

标签: python nltk

 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?

1 个答案:

答案 0 :(得分:1)

假设我们将Q分解为 null 以及所有其余的Qx。然后,您可以将S的规则重新编写为:

S - > Qx NP VP | NP VP Qx | NP VP

根本不需要Q

事实上,除非您需要接受空字符串,否则任何CFG都可以转换为没有“null”。