我目前正在从事一个涉及 NLP 的项目。我已经实现了 Jurafsky 和 Martin 中给出的 CKY 标识符(第 450 页的算法)。这样生成的表实际上将非终结符存储在表中(而不是通常的布尔值)。但是,我得到的唯一问题是检索解析树。
这是我的 CKY 标识符的作用的说明:
这是我的语法
S -> NP VP
S -> VP
NP -> MODAL PRON | DET NP | NOUN VF | NOUN | DET NOUN | DET FILENAME
MODAL -> 'MD'
PRON -> 'PPSS' | 'PPO'
VP -> VERB NP
VP -> VERB VP
VP -> ADVERB VP
VP -> VF
VERB -> 'VB' | 'VBN'
NOUN -> 'NN' | 'NP'
VF -> VERB FILENAME
FILENAME -> 'NN' | 'NP'
ADVERB -> 'RB'
DET -> 'AT'
这是算法:
for j from i to LENGTH(words) do
table[j-1,j] = A where A -> POS(word[j])
for i from j-2 downto 0
for k from i+1 to j-1
table[i,j] = Union(table[i,j], A such that A->BC)
where B is in table[i,k] and C is in table[k,j]
这就是我的解析表在填充后的样子:
现在我知道由于 S 位于 [0,5] 中,字符串已被解析,并且对于 k = 1(根据 Martin 和 Jurafsky 中给出的算法),我们有 S -> table[0][2 ] 表[2][5] 即 S -> NP VP
我得到的唯一问题是我已经能够检索使用的规则,但是它们的格式混乱,即不是基于它们在解析树中的出现。有人可以建议一种算法来检索正确的解析树吗?
谢谢你。