如何使用spaCy和Python提取“b-per”、“b-misc”等类型的命名实体识别标签?

问题描述 投票:0回答:1

我能找到的文档建议在 spaCy 文档中使用跨度的“labels_”属性。然而对我来说,这返回 POS 标签而不是 NER 标签。我需要有类型来指示它是否开始 NER 范围(“B”或“I”)和 NER 标签的类型(例如“per”代表一个人),否则如果它不是 NER 范围则为“o” .

for idx, doc in enumerate(train_docs):
    for ent in doc.ents:
        ner_structured_docs.append([idx, ent.text,ent.label_])

这给出了索引(即句子ID),因为每个文档都是一个单独的句子。然后给出跨度 (ent)。 ent.text 正确给出了范围的文本。然而 ent.label_ 给出的是 POS 标签(例如“NOUN”、“DET”)而不是 NER 标签。

python nlp spacy named-entity-recognition
1个回答
0
投票

查看访问实体注释和标签

您还可以使用

token.ent_iob_
token.ent_type_
属性访问令牌实体注释。
token.ent_iob_
指示实体是在标签上开始、继续还是结束。如果令牌上没有设置实体类型,它将返回一个空字符串。

这是一个例子:

import spacy

nlp = spacy.load("en_core_web_sm")
res = nlp("I am Tom and I was born in New York")

IOB_tags = [
    "-".join(filter(len, (token.ent_iob_, token.ent_type_)))
    for token in res
]

这是结果:

['O', 'O', 'B-PERSON', 'O', 'O', 'O', 'O', 'O', 'B-GPE', 'I-GPE']
© www.soinside.com 2019 - 2024. All rights reserved.