在NLTK中没有pos_tag的ne_chunk

san*_*ang 5 python tags tree chunking nltk

我正试图在nltk中使用ne_chunk和pos_tag来判断一个句子.

from nltk import tag
from nltk.tag import pos_tag
from nltk.tree import Tree
from nltk.chunk import ne_chunk

sentence = "Michael and John is reading a booklet in a library of Jakarta"
tagged_sent = pos_tag(sentence.split())

print_chunk = [chunk for chunk in ne_chunk(tagged_sent) if isinstance(chunk, Tree)]

print print_chunk
Run Code Online (Sandbox Code Playgroud)

这就是结果:

[Tree('GPE', [('Michael', 'NNP')]), Tree('PERSON', [('John', 'NNP')]), Tree('GPE', [('Jakarta', 'NNP')])]
Run Code Online (Sandbox Code Playgroud)

我的问题是,是否有可能不包括pos_tag(如上面的NNP)并且仅包括Tree'GPE','PERSON'?什么'GPE'的意思?

提前致谢

ale*_*xis 4

命名实体分块器将为您提供一棵包含块和标签的树。你无法改变这一点,但你可以去掉标签。从你的开始tagged_sent

chunks = nltk.ne_chunk(tagged_sent)
simple = []
for elt in chunks:
    if isinstance(elt, Tree):
        simple.append(Tree(elt.label(), [ word for word, tag in elt ]))
    else:
        simple.append( elt[0] )
Run Code Online (Sandbox Code Playgroud)

如果您只想要块,请省略else:上面的子句。您可以调整代码以按照您想要的方式包装块。我使用 nltkTree将更改保持在最低限度。请注意,某些块由多个单词组成(尝试在示例中添加“New York”),因此块的内容必须是列表,而不是单个元素。

附言。“GPE”代表“地缘政治实体”(显然是一个词块错误)。您可以在此处查看 nltk 书中的“常用标签”列表。