NLTK树数据结构,查找一个节点,它是父节点还是子节点

我正在使用nltk的Tree数据结构来处理parsetree字符串。

from nltk.tree import Tree

parsed = Tree('(ROOT (S (NP (PRP It)) (VP (VBZ is) (ADJP (RB so) (JJ nice))) (. .)))')

但是,数据结构似乎受到限制。是否可以通过其字符串值获取节点,然后导航至顶部或底部?

例如,假设您要获取字符串值为 ‘nice’ 的节点,然后查看其父级,子级等是什么?可以通过nltk的Tree实现该节点吗?

回答:

对于NLTK 3.0,您想使用ParentedTree子类。

http://www.nltk.org/api/nltk.html#nltk.tree.ParentedTree

使用给定的示例树,创建ParentedTree并搜索所需的节点:

from nltk.tree import ParentedTree

ptree = ParentedTree.fromstring('(ROOT (S (NP (PRP It)) \

(VP (VBZ is) (ADJP (RB so) (JJ nice))) (. .)))')

leaf_values = ptree.leaves()

if 'nice' in leaf_values:

leaf_index = leaf_values.index('nice')

tree_location = ptree.leaf_treeposition(leaf_index)

print tree_location

print ptree[tree_location]

您可以直接遍历树以获取子树。parent()方法用于查找给定子树的父树。

这是一个为子代和父代使用更深树的示例:

from nltk.tree import ParentedTree

ptree = ParentedTree.fromstring('(ROOT (S (NP (JJ Congressional) \

(NNS representatives)) (VP (VBP are) (VP (VBN motivated) \

(PP (IN by) (NP (NP (ADJ shiny) (NNS money))))))) (. .))')

def traverse(t):

try:

t.label()

except AttributeError:

return

else:

if t.height() == 2: #child nodes

print t.parent()

return

for child in t:

traverse(child)

traverse(ptree)

以上是 NLTK树数据结构,查找一个节点,它是父节点还是子节点 的全部内容, 来源链接: utcz.com/qa/399584.html

回到顶部