Python 命名实体识别 (NER) : Replace named entities with labels

标签 python nlp spacy named-entity-recognition

我是 Python NER 新手,正在尝试用标签替换文本输入中的命名实体。

from nerd import ner
input_text = """Stack Overflow is a question and answer site for professional and enthusiast programmers. It is a privately held website, the flagship site of the Stack Exchange Network,[5][6][7] created in 2008 by Jeff Atwood and Joel Spolsky."""
doc = ner.name(input_text, language='en_core_web_sm')
text_label = [(X.text, X.label_) for X in doc]
print(text_label)

输出为:[('2008', 'DATE'), ('Jeff Atwood', 'PERSON'), ('Joel Spolsky', 'PERSON')]

然后我可以提取人员,例如:

people = [i for i,label in text_label if 'PERSON' in label] 
print(people)

获取['Jeff Atwood', 'Joel Spolsky']

我的问题是如何替换原始输入文本中已识别的命名实体,以便结果为:

Stack Overflow 是一个面向专业和爱好者程序员的问答网站。它是一个私有(private)持有的网站,是 Stack Exchange Network 的旗舰网站,[5][6][7] 由 PERSON 和 PERSON 于 DATE 创建。

非常感谢!

最佳答案

您确实可以按照 @taha 的解释循环遍历文本和标签,但在一般情况下这是一个坏主意!此循环可能会在文本中混合具有相同名称但不同类型(或者有时不是实体)的实体,因为您只依赖于实体的标签。

例如考虑以下情况:

In 2000 I sent 2000 emails.

I saw a statue of Washington in Washington.

您将无法区分出现的“2000”或“Washington”!这可能看起来很少见,但避免此类错误不是更好吗,特别是对于很长的文档?

据我了解,ner​​ python 模块看起来像是到 Spacy 的简单绑定(bind)。所以我想你可以通过一些基本的Python编程来访问每个实体的“start_char”和“end_char”值来避免这种情况。顺便说一句,我也认为从计算的角度来看这应该更有效。

关于Python 命名实体识别 (NER) : Replace named entities with labels,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62904623/

相关文章:

python - 在 NLP 任务的文本预处理中处理\u200b(零宽度空格)字符

python - 在 Linux 上使用 Python 进行视频捕获的最佳库是什么?

nlp - 过滤掉无意义的短语

python - 将 ctypes C 结构返回给 C

python - 属性错误: 'list' object has no attribute 'lower' with CountVectorizer

tensorflow - 在聊天机器人中处理上下文

python - spaCy GoldParse 中的 KeyError

spacy - Spacy 中德语词形还原的惊人结果

python - 计算包含字典行的 numpy 数组中所有唯一值的总和

python - Sqlalchemy - 如何在 Oracle 数据库中指定所有者