Doccano的标注结果转换为BIO格式
简介
实现了Doccano导出格式到BIO命名实体识别格式的转换
项目完整可运行的代码:https://github.com/JieShenAI/csdn/tree/main/KnowledgeGraph/data_convert/doccano2BIO
演示
-
Doccano的导出格式:
{"id":161,"text":"“十四五”时期是我省全面建成小康社会之后,乘势而上开启全面建设社会主义现代化国家新征程的第一个五年,也是谱写新时代湖北高质量发展新篇章的关键五年","entities":[],"relations":[],"Comments":[]} {"id":162,"text":"进入新发展阶段,发展不平衡不充分仍然是我省最大的实际,抓发展仍然是第一要务,必须坚持以xxx新时代中国特色社会主义思想为指导,深入贯彻落实xxxxxx考察湖北、参加湖北代表团审议时的重要讲话精神,胸怀“两个大局”,贯彻新发展理念,服务构建新发展格局,加快“建成支点、走在前列、谱写新篇”进程,以疫后重振和高质量发展的实际成效体现湖北担当、展现湖北作为","entities":[{"id":1106,"label":"基本遵循","start_offset":43,"end_offset":59},{"id":1107,"label":"基本遵循","start_offset":100,"end_offset":106},{"id":1108,"label":"主要任务","start_offset":128,"end_offset":142},{"id":1109,"label":"主要任务","start_offset":147,"end_offset":151},{"id":1110,"label":"主要任务","start_offset":152,"end_offset":157}],"relations":[],"Comments":[]}
-
转换后的BIO格式
(由于换行符很多,下述只展示一部分转换后的格式)以 O x B-基本遵循 x I-基本遵循 x I-基本遵循 新 I-基本遵循 时 I-基本遵循 代 I-基本遵循 中 I-基本遵循 国 I-基本遵循 特 I-基本遵循 色 I-基本遵循 社 I-基本遵循 会 I-基本遵循 主 I-基本遵循 义 I-基本遵循 思 I-基本遵循 想 I-基本遵循 为 O
代码实现
import json
def load_jsonl(file_path):
with open(file_path, 'r', encoding='utf-8') as file:
for line in file:
yield json.loads(line)
def doccano2BIO(file_name, output_file='out.txt'):
def _get_pair():
data = load_jsonl(file_name)
for line in data:
text = line['text']
labels = ['O'] * len(text)
for ent in line['entities']:
label, start_offset, end_offset = ent['label'], ent['start_offset'], ent['end_offset']
labels[start_offset] = 'B-' + label
labels[start_offset+1: end_offset] = ['I-' + label] * (end_offset - start_offset - 1)
yield text, labels
with open(output_file, 'w+') as f:
content = []
for text, labels in _get_pair():
s = []
item = zip(list(text), labels)
for line in item:
s.append(' '.join(line) + '\n')
s = ''.join(s)[:-1]
content.append(s)
content = "\n\n".join(content)
f.write(content)
运行
使用上述代码完成Doccano导出格式到BIO格式的转换;
完整可运行的代码:https://github.com/JieShenAI/csdn/tree/main/KnowledgeGraph/data_convert/doccano2BIO