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

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

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

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

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

一、原始数据

train.json文件中包含完整的医生和患者之间的对话信息,并且该数据中已经完成了疾病判断、自我报告、对话生成、序列标注任务,如下图所示:
【NER】CCL2021医疗命名体识别之数据预处理(处理.json文件)_第1张图片

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

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

【NER】CCL2021医疗命名体识别之数据预处理(处理.json文件)_第2张图片

三、具体实现

  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()
    

你可能感兴趣的:(笔记,json,人工智能,机器学习)