首页 > 解决方案 > 使用 displacy 显示自定义实体

问题描述

我有一个带有一组固定命名实体(人、位置、...)的文本字符串,如下例所示

text = "My name is John Smith and I live in Paris"
entities = [
    ("Person", 11, 21),  # John Smith
    ("Location", 36, 41),  # Paris
]

我想使用 Spacy 的非常好的渲染器显示它们,称为 DiSplacy [1]。如果我理解得很好,对我来说最好的方法是使用我的自定义实体在 Spacy 中创建一个自定义Doc对象,但我没有找到正确的方法来做到这一点。

[1] https://spacy.io/usage/visualizers#ent

标签: pythonspacynamed-entity-recognition

解决方案


我终于在 Spacy 论坛(https://github.com/explosion/spaCy/discussions/7239)中找到了解决方案。

简而言之,Doc 可以很容易地用 spacy 3.0+ 中的实体实例化。在 Spacy 2.0+(我的情况)中,一个解决方案是使用char_span

import spacy

nlp = spacy.blank("en")

text = "My name is John Smith and I live in Paris"
entities = [
    ("Employee", 11, 21),  # John Smith
    ("Location", 36, 41),  # Paris
]

doc = nlp(text)

ents = []
for ee in entities:
    ents.append(doc.char_span(ee[1], ee[2], ee[0]))

doc.ents = ents

for ent in doc.ents:
    print(ent, ent.label_, sep="\t")

推荐阅读