在NLTK中,我们可以将括号树转换为实际的Tree对象。然而,当一个标记包含括号时,解析结果可能不是你所期望的,因为NLTK将这些括号解析为一个新的节点。
举个例子,考虑这个句子:
They like(d) it a lot
这个句子可以被解析为:
(S (NP (PRP They)) (VP like(d) (NP (PRP it)) (NP (DT a) (NN lot))) (. .))
但是如果你用NLTK将其解析成树并输出,就会发现 (d)
被解析为一个新的节点,这是意料之中的事情。
from nltk import Tree
s = '(S (NP (PRP They)) (VP like(d) (NP (PRP it)) (NP (DT a) (NN lot))) (. .))'
tree = Tree.fromstring(s)
print(tree)
结果是
(S
(NP (PRP They))
(VP like (d ) (NP (PRP it)) (NP (DT a) (NN lot)))
(. .))
所以 (d )
是VP中的一个节点,而不是标记 like
的一部分。在树解析器中有没有方法可以解决括号的问题?
1条答案
按热度按时间zy1mlcev1#
嗯,在这种情况下,为什么在解析树之前没有将开闭括号转换为
-LRB-
和-RRB-
?更具体地说,
(S (NP (PRP They)) (VP like(d) (NP (PRP it)) (NP (DT a) (NN lot))) (. .))
是从哪里来的?了解它来自哪里,我们可以找到缺少-LRB-
和-RRB-
转换的正确正则表达式或预处理步骤。