从 spaCy 中的一个令牌中检索实体的跨度

Meg*_*ega 4 named-entity-recognition spacy

给定一个令牌,它是具有多个令牌的命名实体的一部分,是否有直接方法来获取该实体的跨度?

例如,考虑这个有两个词命名实体的句子:

>>> doc = nlp("This year was amazing.")
>>> doc.ents
(This year,)
>>> doc[0].ent_type_
'DATE'
>>> doc[1].ent_type_
'DATE'
Run Code Online (Sandbox Code Playgroud)

假设我们考虑第一个标记(“This”),是否可以检索其所属的实体?也许是这样的:

>>> doc[0].ents_
(This year,)
Run Code Online (Sandbox Code Playgroud)

我猜有时一个令牌可以是多个实体的一部分。

目前,我通过创建一个从索引到实体索引的反向字典来获得它。

谢谢!

asu*_*asu 5

您可以遍历doc.ents,然后将它们合并为一个标记,因为命名实体是Span对象。spaCy 还附带了一个方便的组件,您可以将其插入到自动处理此问题的管道中:

from spacy.pipeline import merge_entities    
nlp = spacy.load("en_core_web_sm")  # or any other model
nlp.add_pipe(merge_entities)
print([token.text for token in nlp("John Murphy lives in New York City")])
# ['John Murphy', 'lives', 'in', 'New York City'] 
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你!它没有提供我正在寻找的解决方案,因为我仍然想保留原始令牌。尽管如此,它还是非常有用的。 (2认同)