章亞東 胡孔法 楊濤 謝佳東
摘 要: 利用網絡爬蟲抓取網絡中名老中醫醫案數據,可以為醫案數據挖掘提供優質的原始數據。提出了一種基于網絡爬蟲的名老中醫醫案數據采集與清理算法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