使用SpaCy DisplaCy可视化定制IOB标签



我有一个文本文件,我使用SpaCy创建了一个DOC对象:

doc = nlp.make_doc(raw_text)

我还为这个DOC对象中的每个单词提供了一个自定义IOP标记列表:

['O', 'B-PER', 'I-PER', 'O', 'O', 'O', 'O', 'B-DATE', 'I-DATE', 'I-DATE', 'I-DATE', 'I-DATE', 'O', 'O', 'O', 'O', 'O', 'B-ORG', 'I-ORG']

我想将这些标签中的每一个分配给DOC对象中的每个单词,并使用DisplaCy可视化结果(标签列表的长度等于DOC对象的长度):

displacy.render(doc, style="ent", jupyter=True)

然而,我不知道如何做到这一点。当我有每个标签标签的开始和结束索引时,我使用了doc.char_span方法:

def Visulaizer(file_name, path):
nlp = spacy.blank("fa")
f = open(path+'/'+file_name+'.txt', 'r')
raw_text = f.read()
doc = nlp.make_doc(raw_text)
spans = tags
ents = []
for span_start, span_end, label in spans:
ent = doc.char_span(span_start, span_end, label=label)
if ent is None:
continue
ents.append(ent)
doc.ents = ents
displacy.render(doc, style="ent", jupyter=True)
visualized_data = Visulaizer('test', path)

我如何改变我的代码,使其匹配我的当前设置?

您只能通过在初始化Doc时立即提供整个列表来直接从IOB标记分配分配。使用Doc(ents=):

from spacy.tokens import Doc
doc = Doc(nlp.vocab, words=words, ents=iob_tags)

或者,您可以使用spacy.training.iob_utils.biluo_tags_to_spans将IOB标记转换为ent span,并将其分配给doc.ents。但是,由于nlp的默认标记器可能不会生成与原始注释中完全相同的单词,因此最好从对齐的wordsents开始,然后确保标记与正确的单词对齐。

最新更新