NLTK ChartParser 给出空列表
NLTK ChartParser giving empty list
任务是定义语法并使用 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)))
但是输出给出了一个空列表。
输出:
[]
有人可以帮我解决这个问题吗?
目前,语法无法匹配任何字符串,因为它包含一个无限循环。
如果我部分展开 S
,我会得到 NP 'on' NP VP
,因为 NP -> NP
无法将其解析为 "nothing";我必须总是匹配其他东西。
如果 NP -> ''
那么这将允许 NP 不匹配(好),因此这意味着 S -> VP
将开始匹配第一个单词 Put
。这应该使语法走上正轨,具体取决于您希望它如何匹配。
任务是定义语法并使用 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)))
但是输出给出了一个空列表。
输出:
[]
有人可以帮我解决这个问题吗?
目前,语法无法匹配任何字符串,因为它包含一个无限循环。
如果我部分展开 S
,我会得到 NP 'on' NP VP
,因为 NP -> NP
无法将其解析为 "nothing";我必须总是匹配其他东西。
如果 NP -> ''
那么这将允许 NP 不匹配(好),因此这意味着 S -> VP
将开始匹配第一个单词 Put
。这应该使语法走上正轨,具体取决于您希望它如何匹配。