Python 将实体ID映射到SpaCy 3.0中的字符串

Python 将实体ID映射到SpaCy 3.0中的字符串,python,python-3.x,spacy,named-entity-recognition,Python,Python 3.x,Spacy,Named Entity Recognition,我已经使用spacy 3.0培训了一个简单的NER管道。培训结束后,我想从Doc(Doc=nlp(text))中获得一个预测IOB标签列表。例如,[“O”、“O”、“B”、“I”、“O”] 我可以使用 但是我如何获得映射/查找 我在doc.vocab.lookups.tables中未找到任何查找表 我也知道,通过访问每个令牌的ent\u iob\uuu([token.ent\u iob\uu for token in doc]),我可以达到同样的效果,但我想知道是否有更好的方法?查看文档: e

我已经使用spacy 3.0培训了一个简单的NER管道。培训结束后,我想从
Doc
Doc=nlp(text)
)中获得一个预测IOB标签列表。例如,
[“O”、“O”、“B”、“I”、“O”]

我可以使用

但是我如何获得映射/查找

我在
doc.vocab.lookups.tables
中未找到任何查找表

我也知道,通过访问每个令牌的
ent\u iob\uuu
[token.ent\u iob\uu for token in doc]
),我可以达到同样的效果,但我想知道是否有更好的方法?

查看文档:

  • ent\u iob
    iob命名实体标记的代码。3表示令牌开始于一个实体,2表示它在实体外部,1表示它在实体内部,0表示没有设置实体标记
  • ent\u iob\u
    iob命名实体标记的代码。“B”表示令牌以实体开头,“I”表示它位于实体内部,“O”表示它位于实体外部,“O”表示未设置实体标记
因此,您只需使用一个简单的
iob_映射={0:,1:“I”,2:“O”,3:“B”}
字典替换将ID映射到名称:

doc = nlp("John went to New York in 2010.")
print([x.text for x in doc.ents])
# => ['John', 'New York', '2010']
iob_map = {0: "", 1: "I", 2: "O", 3: "B"}
print(list(map(iob_map.get, doc.to_array("ENT_IOB").tolist())))
# => ['B', 'O', 'O', 'B', 'I', 'O', 'B', 'O']

谢谢你的回答!在本例中,您正在手动构建字典/映射。有没有一种方法可以从spaCy中提取出来?我知道在这个例子中,它非常简单,但我实际上想提取
ent\u type
ent\u type
映射,并且我必须实际检查所有文档中的所有标记,对吗?@muriocnha没有这样的映射,因为它这么简单<代码>iob_映射={0:,1:“I”,2:“O”,3:“B”}。否则,使用你的方法(我在我的报告中错误地使用了)。
doc = nlp("John went to New York in 2010.")
print([x.text for x in doc.ents])
# => ['John', 'New York', '2010']
iob_map = {0: "", 1: "I", 2: "O", 3: "B"}
print(list(map(iob_map.get, doc.to_array("ENT_IOB").tolist())))
# => ['B', 'O', 'O', 'B', 'I', 'O', 'B', 'O']