在Python中,我有一个如下列表的输入 -
[('S', ['NP', 'VP']),
('A', ['V', 'NP']),
('VP', ['V', 'NP']),
('NP', ['DET', 'NP']),
('N', "'mouse'"),
('NP', "'mouse'"),
('DET', "'the'"),
('V', "'saw'"),
('N', "'Ron'"),
('NP', "'Ron'")]
这是以下CYK算法的结果 -
S -> NP VP
VP -> A NP | V NP
NP -> N N | DET NP | 'chocolate' | 'cat' | 'John' | 'Ron' | 'mouse'
DET -> 'the'
N -> 'chocolate' | 'cat' | 'John' | 'Ron' | 'mouse'
V -> 'saw' | 'bought' | 'ate'
A -> V NP
我想要匹配的字符串是“Ron看到鼠标”
我想将输出关联起来 -
(S (NP Ron) (VP (V saw) (NP (DET the) (NP mouse))))
我不确定应该如何构造算法,特别是使用可能包含多个输出的模糊算法。 我该如何构建代码?有/或没有递归的任何建议应该是更好的方法吗?
UPDATE ---
在使用输入列表添加额外的父节点和子节点位置值后,我设法获得了一个完全解析树。但我的问题并没有解决模棱两可的句子。