使用 spacy 从文档中删除命名实体

joh*_*_28 6 python text nlp spacy

我试图从被 spacy 认为是命名实体的文档中删除单词,因此基本上从字符串示例中删除了“瑞典”和“诺基亚”。我找不到解决实体存储为跨度的问题的方法。因此,当将它们与 spacy 文档中的单个标记进行比较时,它会提示错误。

在后面的步骤中,这个过程应该是一个应用于存储在一个 Pandas 数据框中的几个文本文档的函数。

我很感激任何关于如何更好地发布问题的帮助和建议,因为这是我在这里的第一个问题。


nlp = spacy.load('en')

text_data = u'This is a text document that speaks about entities like Sweden and Nokia'

document = nlp(text_data)

text_no_namedentities = []

for word in document:
    if word not in document.ents:
        text_no_namedentities.append(word)

return " ".join(text_no_namedentities)

Run Code Online (Sandbox Code Playgroud)

它会产生以下错误:

类型错误:参数“其他”的类型不正确(预期 spacy.tokens.token.Token,得到 spacy.tokens.span.Span)

APh*_*ips 2

这将为您带来您所要求的结果。查看命名实体识别应该有助于您继续前进。

import spacy

nlp = spacy.load('en_core_web_sm')

text_data = 'This is a text document that speaks about entities like Sweden and Nokia'

document = nlp(text_data)

text_no_namedentities = []

ents = [e.text for e in document.ents]
for item in document:
    if item.text in ents:
        pass
    else:
        text_no_namedentities.append(item.text)
print(" ".join(text_no_namedentities))
Run Code Online (Sandbox Code Playgroud)

输出:

This is a text document that speaks about entities like and
Run Code Online (Sandbox Code Playgroud)