名老中医医案数据采集与清理算法DCCA的研究
2018-12-15章亚东胡孔法杨涛谢佳东
章亚东 胡孔法 杨涛 谢佳东
摘 要: 利用网络爬虫抓取网络中名老中医医案数据,可以为医案数据挖掘提供优质的原始数据。提出了一种基于网络爬虫的名老中医医案数据采集与清理算法DCCA(Data Collection and Cleaning Algorithm),处理了12670个网页,抽取出28813条诊次数据。与传统方法比较,DCCA的抓取效率更高、处理结果属性清晰、处理后的数据冗余度低,极大地提高了中医药网站中名老中医医案数据采集与清理效果。
关键词: 名老中医; 医案; 数据采集与清理; 网络爬虫; DCCA
中图分类号:TP311 文献标志码:A 文章编号:1006-8228(2018)10-68-03
Abstract: Using web crawlers to capture the data of famous old Chinese medicine doctors' in the network can provide high quality raw data for medical data mining. This paper proposes a data collection and cleaning algorithm DCCA (Data Collection and Cleaning Algorithm) based on web crawler, which processes 12,670 web pages and extracts 28,813 diagnostic data. Compared with the traditional methods, DCCA has higher crawling efficiency, clearer processing result attributes and lower data redundancy after processing, which greatly improves the data collection and cleaning effect of famous Chinese medicine doctors in Chinese medicine websites.
Key words: famous Chinese medicine doctor; medical records; data collection and cleaning; web crawler; DCCA
0 引言
数据挖掘(DataMining)是按照既定的业务目标从大量的数据中提取出潜在、有效并容易被人理解的模式的高级处理过程[1]。名老中医是中医药学术发展的杰出代表,总结名老中医的经验不仅能丰富中医学的理论体系,还能为中医药学术的进步产生巨大的推动作用[2]。网络中有大量的数据,但是数据的质量不高,研究者们需要花費大量的时间清洗数据。如果在收集数据的时候能将数据进行清理,则会大幅度地提高数据挖掘研究者的工作效率。
网络爬虫(Web Crawler)是一个自动下载网页的计算机程序,是搜索引擎的重要组成部分[3]。目前,国内外学者对网络爬虫技术已有一定的研究。孙立伟比较了通用网络爬虫、聚焦网络爬虫、增量式网络爬虫和深层网络爬虫四种常见网络爬虫[3]。于怀宝的爬虫系统主要是访问JS动态内容,并用正则表达式编写页面解析模板来抽取数据[4]。曾伟辉则对异步交互式网络 AJAX 框架下的爬虫进行了研究[5]。上述研究者们的工作主要聚焦在采集数据上,忽略了对数据的清洗,本文使用DCCA算法,从网站上抓取并筛选出名老中医的医案数据,这些数据可以为中医药数据挖掘提供大量的优质数据。
1 网络爬虫抓取与数据抽取方法
对于医疗系统数据挖掘的研究[6-8],多半集中于现有数据的整理分析,缺乏从获取数据、整理数据到分析数据的完整过程。中医药网站上的数据内容良莠不齐,数据结构多,数据的结构化水平低,包含的信息维度高,不符合数据挖掘的要求。所以,一个既包含数据采集,亦包含数据清理的方法亟待研究。本算法包含两个部分:一是抓取名老中医医案信息的网页;二是清洗名老中医医案的数据。
名老中医医案数据包括了病人基本信息,病情描述信息以及诊断信息等,这些信息的结构复杂且没有规律。表1中所示的是网站中关于治疗胸痹医案的某一诊次的部分内容,表1中的数据包含了多个维度的信息,且这些信息的出现频率不确定,这大大地增加了抽取数据的难度。
关于某疾病,仅有一个诊次的医案属于特殊情况。针对这种情况,本文通过DCCA的选择器来获得数据,其中存在特殊的数据包含在其他HTML标签中,从逻辑上这部分特殊数据不可丢失。DCCA算法在这个问题上做了如下处理:一,遍历这个特定的字符数组,用正则表达式来判断这些字符数组中的数据是否含有阿拉伯数字;二,遍历这些集合,将符合判断条件的数据拼接到最前一个字符串上。经实践检验,该数据处理方式能够达到将逻辑上属于同一部分但在不同HTML标签中的内容整合成同一部分的内容。
不同诊次所包含的信息是不断变化的。例如,某人第一次来就诊时医生没有安排其进行辅助检查,但是随着病情的变化,第二次就诊时医生安排其进行辅助检查,如果把第二诊次辅助检查的信息存放到第一诊次的辅助检查中,就造成了两条脏数据。针对包含多个诊次的名老中医医案信息,DCCA首先区分不同的诊次。主要的方法:一是获取第二诊次的就诊时间,将其作为切分第一诊次和第二诊次及以后诊次的标准;二是对第二诊次及以后诊次的信息按照特殊的标记进行抽取。
2 网络爬虫抓取与数据抽取算法描述
DCCA算法主要是为了抓取中医药网站中名老中医的医案数据,并将网页中的医案信息抽取出来存入数据库,并对医案数据进行清理。
2.1 抓取网站中有关名老中医的医案数据网页
抓取网站中有关名老中医的医案数据,存放在本地磁盘中,便于比较原始数据及清洗后的数据,检验DCCA算法的数据清洗效果。
2.2 医案数据抽取
调用DCCA算法解析名老中医医案数据。算法描述如下:
算法:DCCA(String path)
输入:离线医案数据的存储文件路径path
输出:规范化、标准化后的医案数据
① For x(每个离线医案) in path:
② 对医案数据按照特定的标记进行拆分,若存在二诊时间,则将值赋给wholedignoisedate,创建数组strListFirst
③ If wholedignoisedate≠空串 then
④ 将第一诊次数据存入strListFirst[0],其他诊次的数据存入strListFirst[1]中,抽取第一诊断次的具体信息
⑤ 抽取strListFirst[1]的内容,即按照诊次分开,记切分后的字符串数组为contents_zc
⑥ For k(每个诊次) in contents_zc:
⑦ 对contents_zc(k)的内容按照特殊标记抽取,记切分后的字符串数组为strList2
⑧ For h(二诊及以上信息字符串数组strList2中的每个属性) in strList2:
⑨ 根据摘要(Summary)等关键字切分strList2,将值赋给诊断信息对象(prescrition)的具体属性
⑩ If h start with 中医诊断(TcmDiagnosis)、西医诊断(MedicalDiagnosis)、方剂组成(PrescriptionComposition) And h不是该诊次的最后一个属性 And 第h+1个属性start with摘要(Summary)、就诊时间(PatientDate)、舌质(Tongue)等关键字 then
[11] 将值strList2.get(h) 赋值给诊断信息对象(prescrtion)的具体属性
[12] End
[13] Else 重复步骤⑨
[14] End
[15] End
[16] End
[17] End
[18] Else 根据"div>p[data-name=属性名]"将第一诊次的信息抽取出来赋值给诊断信息对象(prescrtion)的对应属性
[19] End
[20] End
3 实验结果
本实验通过DCCA算法,爬取和清洗了专业的中医药网站上的名老中医医案网页共计12670个。最终获得了符合要求的名老中医医案诊次数据共计28813条,与原始数据比较显示,DCCA算法能够较好地完成对网络上的中医医案數据的爬取与清洗工作。部分处理结果如表2和表3所示。
表2中是处理结果中患者的基本信息,主要包括患者姓名、患者性别、就诊时间、节气、主诉等信息,与原始内容比较发现处理后的第一诊次的内容中没有出现第二诊次的内容,即经过DCCA算法处理后的结果中没有产生脏数据。
表3中是处理结果中患者的刻下症、舌苔、脉象、中医诊断、方名、方剂组成等信息,与原始内容比较发现:处理后的第一诊次的方名等字段的内容中不会出现第二诊次的方名等字段的内容,所以DCCA算法在数据清洗的效果上优于传统方式,同时可发现处理结果中不同诊次的内容与原始信息的内容完全一致。
4 结论
使用传统的方法抓取并清洗名老中医医案,并不能获取准确的医案数据。传统方式抽取页面内容的全部数据,并将抓取的页面数据存入字符串中,然后根据页面数据的关键字符来处理字符串,这时候处理完的关键字就会丢失,会造成对数据识别的错误。再加上医案数据的结构多样性,在真正处理时,如果遇到没被识别的关键字,就会出现切分错误,导致数据维度高等相关问题。
使用DCCA算法抽取网络上的名老中医医案数据,可以完整地抽取每个诊次的全部信息,并且可以避免传统方法中经常出现的第一诊次中包含了第二诊次及以后诊次的数据。通过中医药领域的数据挖掘研究者对处理结果的审查,经DCCA算法处理后的数据达到数据挖掘要求。
参考文献(References):
[1] J D Mazimpaka. Trajectory data mining: A review of methods and applications[J]. Journal of Spatial Information Science,2016.13(2016):61-99
[2] 吴嘉瑞,唐仕欢,郭位先,张晓朦,张冰.基于数据挖掘的名老中医经验传承研究述评[J].中国中药杂志,2014.39(4):614-617
[3] 孙立伟,何国辉,吴礼发.网络爬虫技术的研究[J].电脑知识与技术,2010.6(15):4112-4115
[4] 于怀宝.面向建材信息的网络爬虫系统的设计与实现[D].北京交通大学,2015.
[5] 曾伟辉.支持AJAX 的网络爬虫系统设计与实现[D].中国科学技术大学,2009.
[6] 徐巧云,诸纪,陆雯珺.医疗大数据可视化系统架构研究与实践[J].现代计算机(专业版),2017.30:27-30
[7] 孔抗美,张莹,李韶斌等.医院医疗数据挖掘与分析[J].中国卫生信息管理杂志,2015.8(6):29-33
[8] M Herland, T M Khoshgoftaar, R Wald. A review of data mining using big data in health informatics[J]. Journal of Big Data,2014.1:2