NLTK分块和遍历结果

2024-05-23 17:39:43 发布

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

我使用NLTK RegexpParser从标记的标记中提取名词组和详细组。

如何遍历生成的树以只找到NP或V组的块?

from nltk.chunk import RegexpParser

grammar = '''
NP: {<DT>?<JJ>*<NN>*}
V: {<V.*>}'''
chunker = RegexpParser(grammar)
token = [] ## Some tokens from my POS tagger
chunked = chunker.parse(tokens)
print chunked

#How do I walk the tree?
#for chunk in chunked:
#    if chunk.??? == 'NP':
#         print chunk

(第 (NP载波/NN) 进/出 纸巾-/JJ 和/抄送 细胞培养/JJ 进/出 (NP-the/DT制备/NN) 中的 (NP植入物/NNS) 和/抄送 (NP植入物/NN) (含V/VBG) (NP-the/DT载波/NN) ./。)


Tags: thefrom标记npdtnnprinttokens
3条回答

萨维诺的回答很好,但也值得注意的是,子树也可以通过索引访问,例如

for n in range(len(chunked)):
    do_something_with_subtree(chunked[n])

这应该有效:

for n in chunked:
    if isinstance(n, nltk.tree.Tree):               
        if n.label() == 'NP':
            do_something_with_subtree(n)
        else:
            do_something_with_leaf(n)

token中的小错误

from nltk.chunk import RegexpParser
grammar = '''
NP: {<DT>?<JJ>*<NN>*}
V: {<V.*>}'''
chunker = RegexpParser(grammar)
token = [] ## Some tokens from my POS tagger
//chunked = chunker.parse(tokens) // token defined in the previous line but used tokens in chunker.parse(tokens)
chunked = chunker.parse(token) // Change in this line
print chunked

相关问题 更多 >