文章目录

  • 数据格式
  • 数据描述
  • 数据处理
    • 1、json格式
  • 代码

数据格式

电子病历包含四个部分:

每个部分都有相关的病历和实体标签:

其中病史特点-1.txt等格式是病历实体标签内容:

其中病史特点-1.txtoriginal.txt等格式是病历内容:

数据描述

病史特点-1.txt等实体标签内容:

每一行包括:

实体名字 起始下标 结尾下标 实体类别

实体类别定义

  • 症状和体征 :症状是患者描述的主观感受、体征则是外部观察到的客观事实。举例来说,流鼻涕、头昏及体温超过摄氏三十八度,这三者都是感冒的元素:但流鼻水及头昏是感冒的症状;而体温超过三十八度,则是感冒的体征。
  • 检查和检验 :指通过实验室技术、医疗仪器设备为临床诊断、治疗所提供的依据。
  • 疾病和诊断 :疾病是机体在一定的条件下,受病因损害作用后,因自稳调节紊乱而发生的异常生命活动过程;诊断,是指根据症状来识别病人所患何病。
  • 治疗 :通常是指干预或改变特定健康状态的过程。为解除病痛所进行的活动,如药物、手术等。
  • 身体部位 :指疾病、症状和体征发生的人体解剖学部位。

数据处理

1、json格式

json格式的文本处理

需要将实体类别映射成英文:

'检查和检验': 'CHECK',
'症状和体征': 'SIGNS',
'疾病和诊断': 'DISEASE',
'治疗': 'TREATMENT',
'身体部位': 'BODY'

再将实体类别打上BIO标签:

'O':           0,
'B-TREATMENT': 1,
'I-TREATMENT': 2,
'B-BODY':      3,
'I-BODY':      4,
'B-SIGNS':     5,
'I-SIGNS':     6,
'B-CHECK':     7,
'I-CHECK':     8,
'B-DISEASE':   9,
'I-DISEASE':   10

定义路径和映射字典:

path = r"D:\学习·\自然语言处理\数据集\CCSK2017"
self.raw_data_path = os.path.join(path, 'raw_data/原始数据')
self.process_data_path = os.path.join(path, 'raw_data/data.json')
self.cn2en_dict = {'检查和检验': 'CHECK','症状和体征': 'SIGNS','疾病和诊断': 'DISEASE','治疗':    'TREATMENT','身体部位':  'BODY'}

获取文件夹名称:

['一般项目', '出院情况', '病史特点', '诊疗经过']

使用 os.listdir()

list_dir = os.listdir(self.raw_data_path)

循环读取文件夹内容

        for dir in list_dir:dir_path = self.raw_data_path + '/' + dirfiles = os.listdir(dir_path)for file in files:"""一般项目、出院情况、病史特点、诊疗经过里面的文件"""file_path = dir_path + '/' + fileif 'original' not in file_path:continue

其中 dir_path:

​ D:\学习·\自然语言处理\数据集\CCSK2017\raw_data/原始数据/一般项目
​ D:\学习·\自然语言处理\数据集\CCSK2017\raw_data/原始数据/出院情况
​ D:\学习·\自然语言处理\数据集\CCSK2017\raw_data/原始数据/病史特点
​ D:\学习·\自然语言处理\数据集\CCSK2017\raw_data/原始数据/诊疗经过

files:

读取1.txtoriginal.txt1.txt的格式的文件

文件——rstrip() 、lstrip()和 strip()、zip() 函数

content_filepath = file_path
tag_filepath = content_filepath.replace('.txtoriginal', '')
with open(content_filepath, 'r', encoding = 'utf-8') as f:content = f.read().strip()with open(tag_filepath, 'r', encoding = 'utf-8') as l_f:res = l_f.readlines()tag_content = ['O'] * len(content)#其他类型标签content = [i for i in content]for r in res:r = r.strip().split('\t')tag, s_i, e_i, entity_class = r[0], int(r[1]), int(r[2]), r[3]entity_class = self.cn2en_dict.get(entity_class)"""打上B-TREATMENT','I-TREATMENT',等BI命名实体识别标签"""for i in range(s_i, e_i + 1):if i == s_i:tag_content[i] = 'B-' + entity_classelse:tag_content[i] = 'I-' + entity_classassert len(tag_content) == len(content)

其中

content’: [‘女’, ‘性’, ‘,’, ‘8’, ‘8’, ‘岁’, ‘,’, ‘农’, ‘民’, ‘,’, ‘双’, ‘滦’, ‘区’, ‘应’, ‘营’, ‘子’, ‘村’, ‘人’, ‘,’,
‘主’, ‘因’, ‘右’, ‘髋’, ‘部’, ‘摔’, ‘伤’, ‘后’, ‘疼’, ‘痛’, ‘肿’, ‘胀’, ‘,’, ‘活’, ‘动’, ‘受’, ‘限’, ‘5’, ‘小’,
‘时’, ‘于’, ‘2’, ‘0’, ‘1’, ‘6’, ‘-’, ‘1’, ‘0’, ‘-’, ‘2’, ‘9’, ‘;’, ‘1’, ‘1’, ‘:’, ‘1’, ‘2’, ‘入’, ‘院’, ‘。’],

tag, s_i, e_i, entity_class : 实体名字 、 起始下标、 结尾下标 、 实体类别

tag_content:[‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’,
‘B-BODY’, ‘I-BODY’, ‘I-BODY’, ‘O’, ‘O’, ‘O’, ‘B-SIGNS’, ‘I-SIGNS’, ‘B-SIGNS’, ‘I-SIGNS’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’,
‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’]

然后使用 write_jsonline() 把读取内容保存到json格式

代码

# -*- coding: utf-8 -*-
# @Time    : 2021/5/28
# refer to : Benqi
# @Author  :  xuanyunyunimport os
from ccks2020.tools import write_jsonline, read_jsonlineclass DataTransfer(object):def __init__(self):path = r"D:\学习·\自然语言处理\数据集\CCSK2017"self.raw_data_path = os.path.join(path, 'raw_data/原始数据')self.process_data_path = os.path.join(path, 'raw_data/data.json')self.cn2en_dict = {'检查和检验': 'CHECK','症状和体征': 'SIGNS','疾病和诊断': 'DISEASE','治疗':    'TREATMENT','身体部位':  'BODY'}self.tag2i_dict = {'O':           0,'B-TREATMENT': 1,'I-TREATMENT': 2,'B-BODY':      3,'I-BODY':      4,'B-SIGNS':     5,'I-SIGNS':     6,'B-CHECK':     7,'I-CHECK':     8,'B-DISEASE':   9,'I-DISEASE':   10}def single_file2jsonl(self, path):content_filepath = path#D:\学习·\自然语言处理\数据集\CCSK2017\CCKS2017-master\data2/training dataset v4/一般项目/一般项目-1.txtoriginal.txttag_filepath = content_filepath.replace('.txtoriginal', '')#D:\学习·\自然语言处理\数据集\CCSK2017\CCKS2017-master\data2/training dataset v4/一般项目/一般项目-1.txtwith open(content_filepath, 'r', encoding = 'utf-8') as f:content = f.read().strip()with open(tag_filepath, 'r', encoding = 'utf-8') as tag_f:res = tag_f.readlines()tag_content = ['O'] * len(content)#其他类型标签content = [i for i in content]"""'content': ['女', '性', ',', '8', '8', '岁', ',', '农', '民', ',', '双', '滦', '区', '应', '营', '子', '村', '人', ',', '主', '因', '右', '髋', '部', '摔', '伤', '后', '疼', '痛', '肿', '胀', ',', '活', '动', '受', '限', '5', '小', '时', '于', '2', '0', '1', '6', '-', '1', '0', '-', '2', '9', ';', '1', '1', ':', '1', '2', '入', '院', '。'],"""for r in res:r = r.strip().split('\t')tag, s_i, e_i, entity_class = r[0], int(r[1]), int(r[2]), r[3]"""右髋部   45  47  身体部位"""entity_class = self.cn2en_dict.get(entity_class)"""打上B-TREATMENT','I-TREATMENT',等BI命名实体识别标签"""for i in range(s_i, e_i + 1):if i == s_i:tag_content[i] = 'B-' + entity_classelse:tag_content[i] = 'I-' + entity_classassert len(tag_content) == len(content)res_dic = {'content': content, 'tag': tag_content}return res_dicdef transfer(self):list_dir = os.listdir(self.raw_data_path)[1:]#['result', '一般项目', '出院情况', '病史特点', '诊疗经过']res_jsonl = []for dir in list_dir:dir_path = self.raw_data_path + '/' + dir"""dir_path:D:\学习·\自然语言处理\数据集\CCSK2017\raw_data/原始数据/一般项目D:\学习·\自然语言处理\数据集\CCSK2017\raw_data/原始数据/出院情况D:\学习·\自然语言处理\数据集\CCSK2017\raw_data/原始数据/病史特点D:\学习·\自然语言处理\数据集\CCSK2017\raw_data/原始数据/诊疗经过"""files = os.listdir(dir_path)for file in files:"""一般项目、出院情况、病史特点、诊疗经过里面的文件"""file_path = dir_path + '/' + fileif 'original' not in file_path: #file_path只是包含original的文件continueres_dic = self.single_file2jsonl(file_path)res_jsonl.append(res_dic)"""{'content': ['女', '性', ',', '8', '8', '岁', ',', '农', '民', ',', '双', '滦', '区', '应', '营', '子', '村', '人', ',', '主', '因', '右', '髋', '部', '摔', '伤', '后', '疼', '痛', '肿', '胀', ',', '活', '动', '受', '限', '5', '小', '时', '于', '2', '0', '1', '6', '-', '1', '0', '-', '2', '9', ';', '1', '1', ':', '1', '2', '入', '院', '。'], 'tag': ['O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'B-BODY', 'I-BODY', 'I-BODY', 'O', 'O', 'O', 'B-SIGNS', 'I-SIGNS', 'B-SIGNS', 'I-SIGNS', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O']}"""write_jsonline(self.process_data_path, res_jsonl)if __name__ == '__main__':data_trans = DataTransfer()data_trans.transfer()

电子病历实体识别数据处理、多个文件读取相关推荐

  1. 中文电子病历实体关系抽取研究

    摘要 本文首先对电子病历去隐私,制定了隐私信息标注规范,使用条件随机场完成了隐私信息识别模型的构建.  使用992份经去隐私的已标注中文电子病历,首先实现了基于特征的关系抽取方法,通过抽取一些基本特征 ...

  2. 利用python对excel文件进行操作_数据处理-对Excel文件读取和操作和存储(python版)...

    一:利用python读取Excel中.xls文件中所有数据 #encoding=utf-8 import xlrd import xlwt from xlwt import * fileName=&q ...

  3. python爬取电子病历_一种基于中文电子病历的实体识别方法技术

    本发明专利技术提供了一种基于中文电子病历的实体识别方法,涉及医疗实体识别技术领域.针对目前国内缺少公开中文电子病历标注语料库的缺陷,本发明专利技术通过构建整理医学词典,提出了一种半自动语料库标注方法, ...

  4. 基于RoBERTa-wwm动态融合模型的中文电子病历命名实体识别

    摘要 [目的] 提出基于RoBERTa-wwm动态融合的实体识别模型,提高中文电子病历实体识别效果.[方法] 将预训练语言模型RoBERTa-wwm各Transformer层生成的语义表示进行动态融合 ...

  5. 最新最全-中文生物医学命名实体识别最新研究论文、资源、数据集、性能整理分享

    本资源旨在跟踪中文生物医学自然语言处理的进展,收集整理相关的论文列表和展示现存方法性能. 内容整理自网络,源地址:https://github.com/lingluodlut/Chinese-BioN ...

  6. 零基础入门--中文命名实体识别(BiLSTM+CRF模型,含代码)

    https://github.com/mali19064/LSTM-CRF-pytorch-faster 中文分词 说到命名实体抽取,先要了解一下基于字标注的中文分词. 比如一句话 "我爱北 ...

  7. (转)零基础入门--中文命名实体识别

    转自 https://blog.csdn.net/buppt/article/details/81180361 中文分词 说到命名实体抽取,先要了解一下基于字标注的中文分词. 比如一句话 " ...

  8. 中医门诊电子病历xml文档数据读入数据库实验流程演示

    前言: 本次实验老师要求我们用java程序实现,其整个实现流程也满足了老师提出的实验要求.由于绝大部分都是在课堂上完成的,写得有误的地方还请大家包涵. 1.下载所需的jar包并通过项目Build Pa ...

  9. ELMO实战-命名实体识别

    ELMO模型实战-命名实体识别 数据处理 import numpy as np import torch import os# shared global variables to be import ...

  10. 使用电子签章确立在线医疗电子病历的法律地位

    确立电子病历的法律地位 防控疫情,普通群众只是居家减少外出,而医务人员只有一个选择,那就是迎难而上,抗击疫情.比较欣慰的是,为减轻医务人员压力,许多互联网平台纷纷开通线上问诊通道.互联网医院,在此次阻 ...

最新文章

  1. 区块链中的智能合约是什么?
  2. Navicat数据库非常实用的技巧 (create_time、edit_time 设置默认值和自动更新)
  3. cesium 页面截图_Cesium开发入门篇 | 02开发环境搭建及第一个示例
  4. input 关闭输入法
  5. opencv-api convexHull
  6. 中国智能硬件创新产业发展分析2017
  7. centos 7 64位虚机上android4环境运行
  8. MATLAB学习——Matlab系统环境介绍
  9. java pingfang,PingFang sc字体的使用
  10. android+6.0中兴v5s,中兴v5s
  11. wps怎么自动生成目录?2分钟完成
  12. css的外链写法,纯CSS代码为外链增加图标
  13. 那些不正经的前端笔试题
  14. 牛客练习赛107 A~D除C
  15. 常用的python读写函数
  16. 查看系统架构是32位还是64位--用Enki学Linux系列(15)
  17. 看片会员php源码,会员碎片 · THINKPHP插件 · 看云
  18. EPLAN 接线端子
  19. 计算机网络--数据链路层[微课堂]
  20. IDEA新建项目卡在下载Resolving dependencies of xxx

热门文章

  1. java中间==、equals和hashCode差额
  2. Parts of a URL
  3. LeetCode每日一题——剑指 Offer 10- I. 斐波那契数列
  4. BZOJ 4556(后缀数组+主席树求前驱后继+二分||后缀数组+二分+可持久化线段树)
  5. 使用Nexus3搭建Maven私服+上传第三方jar包到本地maven仓库
  6. Linux学习笔记(1)linux的开关机及重启
  7. Python学习笔记(matplotlib篇)--多图figure
  8. [模板]01分数规划
  9. Centos 7 修改时区
  10. linux学习: sudo命令(ubuntu)