为什么我的句子中的代码没有生成分析树?

时间:2019-02-11 10:08:25

标签: python python-3.x parsing nlp nltk

我正在尝试使用python 3.7和其他nltk库为通用英语句子创建上下文无关的语法。代码成功运行,所有语句均无任何错误。但是并不是所有句子都生成树。 例如:
在以下情况下:

q1 = "I shot an elephant in my pajamas"  
q2 = "Big Data is huge unstructured type of data"  

为q1而不是q2生成分析树。而且我不明白为什么!

st1="""
S -> NP VP
NP -> NNP|Det N|Det N PP
NN -> JJ NN|N
VP -> V JJ|V  NP|V S|V NP PP
PP -> P NP
"""+NNP+"\n"+Det+"\n"+N+"\n"+JJ+"\n"+V+"\n"+P

grammar1 = nltk.CFG.fromstring(st1)
sent = q1.split()
rd_parser = nltk.RecursiveDescentParser(grammar1)
for tree in rd_parser.parse(sent):
    print(tree)

print(st1)
print(grammar1)

以下是q1的输出。并且需要为q2生成相同类型的解析树。

(S
  (NP (Det ) (N I))
  (VP
    (V shot)
    (NP (Det an) (N elephant) (PP (P in) (NP (Det my) (N pajamas))))))
(S
  (NP (Det ) (N I))
  (VP
    (V shot)
    (NP (Det an) (N elephant))
    (PP (P in) (NP (Det my) (N pajamas)))))

您可以看到完整的代码here

1 个答案:

答案 0 :(得分:0)

由于句子不是语法语言,即目标符号S不能得出句子,因此不会为q2生成分析树。

您应该将句子记在纸上,然后手动尝试为其构造一个解析树。您会发现它是不可能完成的,而无法实现它的特定方式应该建议语法需要改变的方式,以使其成为可能。

例如,这是一个问题(不是唯一的问题):在语法上,NNP既导出了“大”和“数据”(又没有导出任何一个),因此(粗略地说)该句子以{ {1}},但NNP NNP无法导出以S开头的格式。