Python 如何在spaCy中获取令牌的毕洛标签?

Python 如何在spaCy中获取令牌的毕洛标签?,python,nlp,spacy,Python,Nlp,Spacy,目前,在spaCy中,可以使用ent\u IOB\u属性()获取令牌的IOB标记。e、 g: 然而,当训练一个模型时,spacy会选择BILUO()。有没有办法将现成的IOB标签转换为BILUO,或者直接获取BILUO标签 Spacy版本1.8要将IOB转换为BILUO,Spacy.gold具有IOB_转换为BILUO功能 >>> import spacy >>> from spacy.gold import iob_to_biluo >>>

目前,在spaCy中,可以使用
ent\u IOB\u
属性()获取令牌的IOB标记。e、 g:

然而,当训练一个模型时,spacy会选择BILUO()。有没有办法将现成的IOB标签转换为BILUO,或者直接获取BILUO标签


Spacy版本1.8要将IOB转换为BILUO,Spacy.gold具有
IOB_转换为BILUO
功能

>>> import spacy
>>> from spacy.gold import iob_to_biluo
>>> nlp = spacy.load('en')
>>> doc = nlp(u'My name is George Washington Singer, and I am an Englishman')
>>> iobs = [i.ent_iob_ for i in doc]
>>> iob_to_biluo(iobs)
[u'O', u'O', u'O', u'B-', u'I-', u'L-', u'O', u'O', u'O', u'O', u'O', u'U-']
在spaCy版本“2.1.3”上测试


源代码可以找到。

扩展LukeG的答案,如果您更喜欢获得完整的令牌(例如,
O
U-PER
B-ORG
I-ORG
),这应该有效(使用spaCy 3.0.5测试)

导入空间
从spacy.training导入iob#u到#这是spacy.gold,在第3版中更改
nlp=空间负荷(“核心网络负荷”)
doc=nlp(“德国是欧洲的一个国家”)
iob=[f“{token.ent_iob_}-{token.ent_type_}”如果token.ent_iob_}!=“O”否则“O”表示文档中的令牌]
biluo=iob_至_biluo(iob)
印刷品(比罗)
结果:

['U-GPE', 'O', 'O', 'O', 'O', 'U-LOC']

除了包含iob前缀和实体类型之外,找不到任何其他方法。

我收到此错误值错误:[E177]检测到格式错误的iob输入:B
['U-GPE', 'O', 'O', 'O', 'O', 'U-LOC']