我想使用doccano或其他“开源文本注释工具”来训练我的模型,并不断改进我的模型。

据我了解,我可以将注释数据导入到doccano中,格式如下:


因此,第一步,我已经加载了一个模型并创建了一个文档:

text = "Test text that should be annotated for Michael Schumacher"
nlp = spacy.load('en_core_news_sm')
doc = nlp(text)


我知道我可以从doccano导出jsonl格式(带有文本和带注释的标签)并使用它训练模型,但是我想知道如何从python中的spaCy doc导出数据,以便可以将其导入doccano。

提前致谢。

最佳答案

我最近有类似的任务,这是我的工作方式:

import spacy
nlp = spacy.load('en_core_news_sm')

def text_to_doccano(text):
    """
    :text (str): source text
    Returns (list (dict)): deccano format json
    """
    djson = list()
    doc = nlp(text)
    for sent in doc.sents:
        labels = list()
        for e in sent.ents:
            labels.append([e.start_char, e.end_char, e.label_])
        djson.append({'text': sent.text, "labels": labels})
    return djson


根据您的示例...

text = "Test text that should be annotated for Michael Schumacher."
djson = text_to_doccano(text)
print(djson)


...将打印出:

[{'text': 'Test text that should be annotated for Michael Schumacher.', 'labels': [[39, 57, 'PERSON']]}]


与此相关的是,当将结果保存到文件时,用于保存JSON的标准json.dump方法将不起作用,因为它会将其写为用逗号分隔的条目列表。 AFAIK,doccano希望每行有一个条目,并且不带逗号。在解决此问题时,以下代码片段的工作方式类似于charm:

import json

open(filepath, 'w').write("\n".join([json.dumps(e) for e in djson]))


/干杯

关于python - 如何导出“带有spaCy实体的文档”以在doccano中使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57902256/

10-12 19:24