我想使用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/