您可能有兴趣阅读我最近的博客:
http://mattshomepage.com/#/blog/feb2013/liftingthehood
这是关于理解 nltk.ne_chunk 函数是如何工作的。但这里有一些我写的代码,你可以快速复制和粘贴,你可能会觉得有帮助:
import nltk
# Loads the serialized NEChunkParser object
chunker = nltk.data.load('chunkers/maxent_ne_chunker/english_ace_multiclass.pickle')
# The MaxEnt classifier
maxEnt = chunker._tagger.classifier()
def ne_report(sentence, report_all=False):
# Convert the sentence into a tokens with their POS tags
tokens = nltk.word_tokenize(sentence)
tokens = nltk.pos_tag(tokens)
tags = []
for i in range(0, len(tokens)):
featureset = chunker._tagger.feature_detector(tokens, i, tags)
tag = chunker._tagger.choose_tag(tokens, i, tags)
if tag != 'O' or report_all:
print '\nExplanation on the why the word \'' + tokens[i][0] + '\' was tagged:'
featureset = chunker._tagger.feature_detector(tokens, i, tags)
maxEnt.explain(featureset)
tags.append(tag)
report_all 标志将让您查看每个单词是如何被挑选的,但您可能只对命名实体的挑选方式感兴趣——默认情况下它设置为 False。
只需输入您喜欢的任何句子,例如“我喜欢 Apple 产品”。并且它将报告 MaxEnt 分类器选择该命名实体的原因的解释。它还将报告可能已选择的其他标签的一些概率。
NLTK 的开发人员提供了一个 .explain() 方法,而这正是该函数所使用的。