【发布时间】:2015-05-07 12:15:57
【问题描述】:
我已经问过如何正确浏览 NTLK 树的问题。
如何正确浏览 NLTK 树(或 ParentedTree)?我想用父节点“VBZ”识别某个叶子,然后我想从那里进一步向上移动到树的左边来识别NP节点。
并提供以下说明:
我从 Tommy 那里得到了以下(非常有帮助的)答案(谢谢!):
from nltk.tree import *
np_trees = []
def traverse(t):
try:
t.label()
except AttributeError:
return
if t.label() == "VBZ":
current = t
while current.parent() is not None:
while current.left_sibling() is not None:
if current.left_sibling().label() == "NP":
np_trees.append(current.left_sibling())
current = current.left_sibling()
current = current.parent()
for child in t:
traverse(child)
tree = ParentedTree.fromstring("(S (NP (NNP)) (VP (VBZ) (NP (NNP))))")
traverse(tree)
print np_trees # [ParentedTree('NP', [ParentedTree('NNP', [])])]
但是如何包含我只提取那些具有 NNP 子节点的 NP 节点的条件呢?
再次感谢任何帮助。
(一般来说,如果你们当中有任何 NLTK 树方面的专家,我很乐意与您聊天并支付几杯咖啡以换取一点见解。)
【问题讨论】: