2017-09-13 73 views
0

我正在尝试使用NLTK树根据单词搜索POS标签。如何访问NLTK树中节点的内容?

我想在树中找到一个词(这里是:不同的)(该词绝对存在于树中),并检查包含这个词的节点的任何子节点是否有给定的标签(这里: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

您可以通过树的所有子树行走。

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') 
+0

虽然这不给我输出,感谢'set(sub_tree.leaves())'。我现在可以访问节点的内容。 – user110327

+1

如果您仍然将引号应用于单词'read_leaf = lambda s:'“%s”'%s',它将不会输出。我删除了引号,并打印出'是' –