python NLTK解析子

2024-04-19 13:01:16 发布

您现在位置:Python中文网/ 问答频道 /正文

关于NLTK中的树的两个问题:

  1. 我能在一棵树(句子)里区分第一,第二。。。子树?在
  2. 如何处理子树叶中的标记?在

下面的代码运行良好

          for subtree in tree.subtrees(filter=lambda t: t.node == 'NP'):
            for attributes in subtree.leaves():
                print attributes

但它返回一个包含单词和标签的列表:

^{pr2}$

以此类推: 我需要区分子树中不同类型的单词。 这个子树.标签()不存在。在

比如:

           for subtree in tree.subtrees(filter=lambda t: t.node == 'NP'):
            for attributes in subtree.leaves():
                if subtree.labels() == 'NN':
                  # do something with the nouns...

谢谢你的提示


Tags: lambdainnodetreefornp标签filter
2条回答

我做了如下的事情从树上提取名词短语。在

from itertools import groupby
[' '.join([t[0] for t,m in group]) for key, group in groupby(tree.pos(), lambda s: s[-1]=='NP') if key]

更一般地说,我们可以检查“组”中的内容,并对组中的元素执行任何操作。例如

^{pr2}$

一旦我们知道“list(group)”中的元素包含什么,我们就可以对它做任何想做的事情。在

另一种方法是使用tree2conlltags。例如

from nltk.chunk import tree2conlltags
from itertools import groupby

chunks = tree2conlltags(tree)

print(chunks)

results = [' '.join(word for word, pos, chunk in group).lower() for key, group in groupby(chunks, lambda s: s[-1]!='O') if key]

所以我用python做了。不管怎样,如果有人有更好的主意。。。在

         for subtree in tree.subtrees(filter=lambda t: t.node == 'NP' or t.node == 'NNS'):
            for attributes in subtree.leaves():
                (expression, tag) = attributes
                if tag == 'NN':
                    # do something with the nouns

相关问题 更多 >