1

我有一个文本文件,我使用 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)

如何更改我的代码以使其与我当前的设置相匹配?

4

1 回答 1

1

您只能通过在初始化Doc. 使用Doc(ents=)

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

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

于 2021-08-12T17:09:31.410 回答