首页 > 解决方案 > NLTK ChartParser 给出空列表

问题描述

任务是定义语法并使用 ChartParser 使用 nltk 中的 ChartParser 包解析任何给定的句子。我的代码如下:

import nltk

your_grammar = nltk.CFG.fromstring("""
S -> NP VP
NP -> NP PP
Nom ->  N
VP -> V NP | V S | VP PP
PP -> P NP
Det -> 'the' 
N -> 'block' | 'table' 
V -> 'Put'
P -> 'on' 
""")

parser = nltk.ChartParser(your_grammar)
sent = 'Put the block on the table'.split()
print (list(parser.parse(sent)))

但是输出给出了一个空列表。

输出:

[]

有人可以帮我吗?

标签: pythonnltk

解决方案


目前,语法不能匹配任何字符串,因为它包含一个无限循环。

如果我部分扩展S,我会得到NP 'on' NP VP并且因为NP -> NP无法将其解决为“无”;我必须总是匹配别的东西。

如果NP -> ''那将允许 NP 不匹配(好),这将因此意味着S -> VPwhich 将开始匹配第一个 word Put。这应该将语法放在正确的轨道上,具体取决于您希望它如何匹配。


推荐阅读