【NER】CCL2021医疗命名体识别之数据预处理(处理.json文件)

本文介绍如何从2021中文计算语言学会议的智能对话诊疗评测比赛中获取的train.json文件中,通过json处理和BIO标注提取,转换为train_data.txt格式的数据,以便用于医疗命名体识别的模型训练。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【NER】医疗命名体识别之数据预处理(处理.json文件)

数据来源:2021年中文计算语言学研究大会的智能对话诊疗评测比赛

任务: 根据提供的医患对话,(1)识别其中的药物和症状实体名称。(2)然后根据医患对话中识别的症状和服用的药物名称,以及患者自述的上下文,根据模板生成医疗报告。

数据预处理任务: 提取出.json文件中的BIO标注,存放进train.txt

一、原始数据

train.json文件中包含完整的医生和患者之间的对话信息,并且该数据中已经完成了疾病判断、自我报告、对话生成、序列标注任务,如下图所示:
请添加图片描述

二、目标数据(用于训练的数据)

训练数据需要将文本和标注一一对应,如下图所示:

请添加图片描述

三、具体实现
  1. 导入包json、tqdm其中json包用来处理json文件,tqdm包用来生成一个进度条,提示进度信息。
    tqdm作用如图:请添加图片描述
  2. 打开train.json文件,train_sent_txt保存所有的词和标签。原始数据中有用的部分为“sentence”“BIO_label”,分别用sent_textsent_label存储
  3. 将得到的训练数据按照格式存储到train_data.txt
  4. 具体代码如下:
    import json
    from tqdm import tqdm
    
    train_path = r"原始数据/train.json"
    # 保留所有的词和标签
    with open(train_path, 'r', encoding='utf8') as fp:
        json_train = json.load(fp)
        train_sent_txt = []
        for k_id in tqdm(json_train):
            dialogue = json_train[k_id]['dialogue']
            for sent_dict in dialogue:
                sent_text = sent_dict['sentence']  # 文本
                sent_label = sent_dict['BIO_label']  # 标签
                sent_item = [char + " " + sent_label.split(' ')[i] for i, char in enumerate(sent_text)]  # 将文本和标签放在一起
                train_sent_txt = train_sent_txt + sent_item + ['\n']
    
    # 将数据写入train_data.txt
    file = open('train_data.txt', 'w', encoding='utf8')
    for i in range(len(train_sent_txt)):
        if str(train_sent_txt[i]) != '\n':
            s = str(train_sent_txt[i]) + '\n'
        else:
            s = str(train_sent_txt[i])
        file.write(s)
    file.close()
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值