使用 nltk 进行命名实体识别,包括 Python 中的上下文

Named entity recognition including context in Python with nltk

我有一段文本,想使用带有 Python 3.6 的 nltk 提取包括上下文在内的命名实体。 下面的例子应该可以说明我的意思:

import nltk

text = 'the Iraqi people'
tokens = nltk.word_tokenize(text)
tag_tokens = nltk.pos_tag(tokens)
named_entities = nltk.ne_chunk(tag_tokens, binary=True)

print(named_entities)

运行 这个代码给了我

(S the/DT (NE Iraqi/NNP) people/NNS)

但是,我希望我的算法将 'Iraqi people' 识别为一个命名实体,即

(S the/DT (NE Iraqi/NNP people/NNS))

现在,我对如何解决这个问题的最佳猜测是查看带有后标记的标记列表,并从专有名词后面的名词中提取块。 有没有更好的方法来解决这个问题,或者甚至是我不知道的图书馆?

ne_chunk代表NLTK目前推荐的named entity chunker,是一种统计模型。也就是说

  • 有时可能是错误的
  • 它可能会被训练来预测与您希望预测的不同的事物

很遗憾,您无法修改模型。所以你有两个选择: 要么你训练自己的模型,这将是很多工作。或者您使用一些启发式方法,例如您提议的方法。

至于使用哪种启发式,这取决于您的应用程序。但是,一般来说,错误不应该让您感到惊讶...