如何访问NLTK树中节点的内容?

时间:2017-09-13 08:16:43

标签: python python-3.x tree nltk

我正在尝试使用NLTK树搜索基于单词的POS标记。

我想在树中找到一个单词(这里:不同)(该单词肯定存在于树中),并检查包含该单词的节点中的任何子节点是否具有给定标签(此处为:NN) 。

from nltk.tree import Tree

input_string = '(ROOT (SBARQ (WHADVP (WRB How)) (SQ (VBZ is) (NP (PRP it)) (ADJP (JJ different) (PP (IN from) (NP (DT the) (JJ dishonest) (NNS businessmen))))) (. ?)))'
for t in Tree.fromstring(input_string, read_node=lambda s: '<%s>' % s, read_leaf=lambda s: '"%s"' % s):
    print (t)

我试图通过文档,但我无法得到更多。

我想做的是:

if t.leaves() in ["different"]:
    if content_of_t (I don't know how to access that) in ["NN"]:
        return "yes"

1 个答案:

答案 0 :(得分:1)

您可以浏览树的所有子树。

tree = Tree.fromstring(
           input_string, 
           read_node=lambda s: '<%s>' % s,
           read_leaf=lambda s: '%s' % s)

for sub_tree in tree.subtrees(): 
    if sub_tree.label()  == '<JJ>' and 'different' in set(sub_tree.leaves()):
        print('yes')