建设网站的那个公司好,营销中国,动漫设计学校,以网络营销为主题的论文研究背景
为通过项目实战增加对命名实体识别的认识#xff0c;本文找到中科院软件所刘焕勇老师在github上的开源项目#xff0c;中文电子病例命名实体识别项目MedicalNamedEntityRecognition。对其进行详细解读。 原项目地址#xff1a;https://github.com/liuhuanyong/Med…研究背景
为通过项目实战增加对命名实体识别的认识本文找到中科院软件所刘焕勇老师在github上的开源项目中文电子病例命名实体识别项目MedicalNamedEntityRecognition。对其进行详细解读。 原项目地址https://github.com/liuhuanyong/MedicalNamedEntityRecognition 修改版项目地址详细注释待补充
项目介绍
数据来自CCKS2018的电子病历命名实体识别的评测任务是对于给定的一组电子病历纯文本文档识别并抽取出其中与医学临床相关的实体并将它们归类到预先定义好的类别中。共提供600份标注好的电子病历文本共需识别含治疗方式、身体部位、疾病症状、医学检查、疾病实体五类实体。 领域命名实体识别问题自然语言处理中经典的序列标注问题 本项目是采用BiLSTMCRF构建模型。 病历结构如下图所示
神经网络结构图 实验数据 import os
class TransferData:def __init__(self):cur /.join(os.path.abspath(__file__).split(/)[:-1]) #获取当前文件地址的上级目录#对分类进行标记self.label_dict {检查和检验: CHECK,症状和体征: SIGNS,疾病和诊断: DISEASE,治疗: TREATMENT,身体部位: BODY}self.origin_path os.path.join(cur, data_origin) #原始数据地址self.train_filepath os.path.join(cur, train.txt) #转化后的训练数据地址returndef transfer(self):f open(self.train_filepath, w,encodingutf-8) #以写入的方式打开训练数据要保存的文件count 0for root,dirs,files in os.walk(self.origin_path):#for (root, dirs, files) in walk(roots)# roots代表需要遍历的根文件夹# root表示正在遍历的文件夹的名字根/子# dirs记录正在遍历的文件夹下的子文件夹集合# files记录正在遍历的文件夹中的文件集合for file in files:filepath os.path.join(root, file)if original not in filepath:continuelabel_filepath filepath.replace(.txtoriginal,)print(filepath, \t\t, label_filepath) #data_origin\一般项目\一般项目-1.txtoriginal.txt data_origin\一般项目\一般项目-1.txtcontent open(filepath,encodingutf-8).read().strip() #打开案例描述文件去掉收尾空格res_dict {}for line in open(label_filepath,encodingutf-8): #打开实体类别文件res line.strip().split( ) #每个实体描述按空格分隔 [右髋部‘21’‘23’‘身体部位’]start int(res[1]) #实体的其实字符位置end int(res[2]) #实体的结束字符位置label res[3] #实体类别label_id self.label_dict.get(label) #返回分类字典中实体类别对应的values作为实体名称的idfor i in range(start, end1):if i start:label_cate label_id -B #定义实体的首字符else:label_cate label_id -I #实体的非首字符res_dict[i] label_cate #构建实体字典{位置index:字符}for indx, char in enumerate(content): #indx文本中字符的位置char字符char_label res_dict.get(indx, O) #如果indx在字典的key中则返回字典value否则返回O代表非实体print(char, char_label) #字符字符实体标注f.write(char \t char_label \n)f.close()return
if __name__ __main__:handler TransferData()train_datas handler.transfer()
连接
原文连接