命名实体识别 (NER) 可能是信息提取的第一步,旨在将文本中的命名实体定位和分类为预定义的类别,例如人名、组织、位置、时间表达、数量、货币价值、百分比 等。 NER 在自然语言处理 (NLP) 的许多领域都有使用,它可以帮助回答许多现实世界的问题,例如:
本文介绍如何使用 NLTK 和 SpaCy 构建命名实体识别器,识别原始文本中的人、组织或位置等事物的名称。
自然语言工具包
import nltk
from nltk.tokenize import word_tokenize
from nltk.tag import pos_tag
信息提取
我们将词标记化和词性标记应用于句子。我们得到一个元组列表,其中包含句子中的各个单词及其相关的词性。
现在我们将实现名词短语分块,以使用正则表达式来识别命名实体,该正则表达式由指示句子应该如何分块的规则组成。
我们的组块模式包含一个规则,即当组块器找到一个可选的限定词 DT 时,应该形成一个名词短语 NP,然后是任意数量的形容词 JJ,然后是一个名词 NN。
块解析
使用这种模式,我们创建了一个块解析器并在我们的句子上测试它。
输出可以被读取为树或以 S 为第一级的层次结构,表示句子。我们也可以以图形方式显示它。
实体
import spacy
from spacy import displacy
from collections import Counter
import en_core_web_sm
nlp = en_core_web_sm.load()
Spacy 的优点之一是我们只需要应用一次 nlp,整个后台管道将返回对象。
从文章中提取命名实体
接下来,我们逐字逐句提取词性并对这句话进行词形还原。
[(x.orth_,x.pos_, x.lemma_) for x in [y
for y
in nlp(str(sentences[20]))
if not y.is_stop and y.pos_ != 'PUNCT']]
最后,我们可视化整篇文章的实体。
源代码
用例:D3交互式可视化Python电子邮件数据集命名实体识别
源代码自然