李憶昕 張穎 王鈺瑩 葛笑 翁蘇湘
摘要:電子病歷歷史數(shù)據(jù)結(jié)構(gòu)化程度較差,管理上“重藏輕用”的現(xiàn)象比較明顯,致使大量的病歷數(shù)據(jù)處于沉睡狀態(tài)中。本文通過(guò)Python爬蟲技術(shù)對(duì)電子病歷歷史數(shù)據(jù)進(jìn)行爬取,再對(duì)數(shù)據(jù)進(jìn)行抽取、篩選和結(jié)構(gòu)化存儲(chǔ)。電子病歷數(shù)據(jù)最后以.xml標(biāo)準(zhǔn)化格式保存,并結(jié)合虛擬教學(xué)平臺(tái)進(jìn)行醫(yī)學(xué)臨床教學(xué)應(yīng)用。將電子病歷數(shù)據(jù)中有價(jià)值的潛在信息發(fā)掘出來(lái),豐富臨床醫(yī)學(xué)專業(yè)教學(xué)資源,并為科學(xué)研究提供基礎(chǔ)。
關(guān)鍵詞:電子病歷;Python爬蟲;醫(yī)學(xué)臨床教學(xué)
電子病歷(Electronic MedicalRecord,EMR)是基于特定系統(tǒng),提供完整準(zhǔn)確的醫(yī)療過(guò)程中的數(shù)據(jù),它是用以替代紙張病歷的基于計(jì)算機(jī)的病人記錄。電子病歷采用電子設(shè)備(如診療卡、計(jì)算機(jī)等)對(duì)病人的醫(yī)療記錄進(jìn)行存儲(chǔ)、傳輸、管理,對(duì)病人信息及醫(yī)療過(guò)程進(jìn)行數(shù)字化。我國(guó)EMR檔案的研究與應(yīng)用起步較晚,但發(fā)展十分迅速。衛(wèi)生部頒發(fā)了《電子病歷系統(tǒng)功能規(guī)范》《電子病歷基本規(guī)范》等規(guī)范法規(guī)。這些重要法規(guī),規(guī)范了電子病歷的建設(shè)、存儲(chǔ)和使用等活動(dòng),為電子病歷的發(fā)展奠定了基礎(chǔ)。
標(biāo)準(zhǔn)化電子病歷的建設(shè)現(xiàn)在已經(jīng)成為業(yè)內(nèi)共識(shí),但結(jié)構(gòu)化EMR系統(tǒng)仍處于發(fā)展階段,尚未有成熟的建設(shè)標(biāo)準(zhǔn)和規(guī)范。現(xiàn)行的EMR系統(tǒng)大多數(shù)為了適應(yīng)醫(yī)院HIS系統(tǒng)應(yīng)用和檔案電子化管理,電子病歷數(shù)據(jù)現(xiàn)多采用非結(jié)構(gòu)化或半結(jié)構(gòu)化形式存儲(chǔ)。EMR內(nèi)容以自由文檔為主,一定程度上滿足了病歷內(nèi)容自由描述的需求,但是EMR管理上“重藏輕用”的現(xiàn)象比較明顯,致使大量的病歷數(shù)據(jù)處于沉睡狀態(tài)中。醫(yī)學(xué)是十分重視實(shí)踐的學(xué)科,醫(yī)學(xué)生的成長(zhǎng)離不開大量的臨床實(shí)踐,激活“沉睡”中的電子病歷并使之服務(wù)于醫(yī)學(xué)生的培養(yǎng)具有十分重要的意義。本研究針對(duì)糖尿病這一典型慢性病EMR數(shù)據(jù)進(jìn)行提取挖掘,將其運(yùn)用于臨床教學(xué)實(shí)踐,以期為今后進(jìn)行更廣泛的EMR歷史數(shù)據(jù)研究打下堅(jiān)實(shí)的基礎(chǔ)。
作為檔案的一種形式,各醫(yī)療機(jī)構(gòu)對(duì)EMR的管理都有嚴(yán)格規(guī)定,因此EMR數(shù)據(jù)的獲取不可能用常規(guī)的數(shù)據(jù)接口或數(shù)據(jù)移植方法來(lái)實(shí)現(xiàn)。EMR數(shù)據(jù)的展現(xiàn)形式一般都是文檔或超文本,如果要激活這些數(shù)據(jù)就必須研究一種靈活高效的數(shù)據(jù)抽取技術(shù)并將這些數(shù)據(jù)以結(jié)構(gòu)化的方式進(jìn)行存儲(chǔ)。
Python是一種開源的面向?qū)ο蟮慕忉屝?、多范式腳本語(yǔ)言。Python兼容性高、優(yōu)雅簡(jiǎn)約且功能強(qiáng)大,是當(dāng)前非常受歡迎的一種編程語(yǔ)言。尤其是Python具有極其強(qiáng)大的數(shù)據(jù)處理、數(shù)據(jù)統(tǒng)計(jì)和處理能力,使得越來(lái)越多的人使用Python進(jìn)行Web數(shù)據(jù)挖掘及統(tǒng)計(jì)分析。相較于C++、Java等語(yǔ)言,Python在網(wǎng)絡(luò)爬蟲應(yīng)用中接口也更簡(jiǎn)單。
醫(yī)院的各類信息系統(tǒng)中每天都會(huì)產(chǎn)生大量的電子病歷數(shù)據(jù),而這些數(shù)據(jù)往往是靜態(tài)的,即只要獲取到HTML中的內(nèi)容就可以得到電子病歷的有用信息。Python提供了廣泛的標(biāo)準(zhǔn)函數(shù)庫(kù),同時(shí)又有眾多支持Python的第三方庫(kù),可以獲取到網(wǎng)絡(luò)上的數(shù)據(jù)。本研究通過(guò)某三甲醫(yī)院內(nèi)部網(wǎng)絡(luò)進(jìn)行EMR數(shù)據(jù)的Python爬取及結(jié)構(gòu)化。
網(wǎng)絡(luò)數(shù)據(jù)獲取分為兩個(gè)階段:第一階段是抓取,第二階段是解析。抓取常采用urlib內(nèi)建模塊中的request功能、Request第三方庫(kù)或者使用Scrapy開源爬蟲框架等。對(duì)于大型爬蟲項(xiàng)目,往往采用Scrapy或者自開發(fā)爬蟲。Requests被稱作是唯一一個(gè)“非轉(zhuǎn)基因”的PythonHTTP客戶端庫(kù),簡(jiǎn)單實(shí)用而友好,支持get、put、post等7種請(qǐng)求方式,同時(shí)支持headers、cookms等的傳遞,SSL證書驗(yàn)證,HTTP(S)代理等。引人Requests庫(kù)可以用簡(jiǎn)易的代碼完成復(fù)雜網(wǎng)頁(yè)信息爬取。對(duì)于電子病歷數(shù)據(jù),其獲取速度要求不高,本方法采用了Request第三方庫(kù)。
數(shù)據(jù)抓取的過(guò)程為:發(fā)送請(qǐng)求是客戶饑發(fā)送—個(gè)請(qǐng)求(Requcst)給服務(wù)器;②獲取口向應(yīng)內(nèi)容,服務(wù)器返回一個(gè)響應(yīng)(Response)。在得到了響應(yīng)內(nèi)容后就需要對(duì)數(shù)據(jù)進(jìn)行解析。當(dāng)前流行的解析方式有BeautifulSoup庫(kù)和re(正則表達(dá)式)模塊。本文采用了兩者結(jié)合的方式進(jìn)行網(wǎng)頁(yè)解析。HTML格式EMR文本抓取結(jié)果如圖1所示。
Beautifl Soup是網(wǎng)頁(yè)抓取數(shù)據(jù)的重要的Python的第三方庫(kù),目前已經(jīng)被移植到bs4中,它簡(jiǎn)單易用,具有處理不規(guī)范標(biāo)記,處理導(dǎo)航、搜索、修改分析樹等功能,十分高效。選擇合適的解析器對(duì)文件進(jìn)行分析,可提高網(wǎng)頁(yè)解析速度,本文采用LXML解析器進(jìn)行解析,而后便可將超文本數(shù)據(jù)轉(zhuǎn)換成樹形結(jié)構(gòu),節(jié)點(diǎn)為Python對(duì)象。使用get_text()方法可以得到正文數(shù)據(jù)(如圖2)。
數(shù)據(jù)經(jīng)過(guò)爬蟲抓取后的HTML數(shù)據(jù)文件,還不能作為有用的信息進(jìn)行存儲(chǔ)和利用,需要進(jìn)行進(jìn)一步的篩選及數(shù)據(jù)抽取。
(1)數(shù)據(jù)文件預(yù)處理。本次實(shí)驗(yàn)環(huán)境中,網(wǎng)絡(luò)爬取的數(shù)據(jù)無(wú)法根據(jù)HTML的title進(jìn)行分類,因此網(wǎng)絡(luò)抓取的數(shù)據(jù)需要根據(jù)提取數(shù)據(jù)內(nèi)容進(jìn)行分類。網(wǎng)絡(luò)抓取的數(shù)據(jù)主要為半結(jié)構(gòu)化文本,首先需要對(duì)主要數(shù)據(jù)進(jìn)行篩選以取得所需主要信息。對(duì)獲取到的EMR數(shù)據(jù),如入院記錄、檢查報(bào)告、檢測(cè)記錄、病程記錄、出院記錄等,采用截取關(guān)鍵信息的方法,查找文本標(biāo)題關(guān)鍵字字符串作為分類的依據(jù)。對(duì)不符合關(guān)鍵信息的無(wú)采集價(jià)值文件,如《告知書》或空數(shù)據(jù)文件則直接丟棄,合棄無(wú)效數(shù)據(jù)。
(2)特征提取。正則表達(dá)式是一種特殊的字符串模式,可以靈活地處理文本工具,用于字符串匹配,是特征提取的一種有效方式。正則表達(dá)式可以用規(guī)定的字符規(guī)則組成“規(guī)則字符串”,進(jìn)行字符匹配模式,通過(guò)字符匹配可以方便地匹配數(shù)字、字符串等需要的數(shù)據(jù)。本研究采用正則表達(dá)式來(lái)處理獲取到的合格數(shù)據(jù)文件,將爬取的數(shù)據(jù)快速分段,再使用關(guān)鍵詞匹配進(jìn)行分類。EMR信息提取時(shí)會(huì)過(guò)濾掉病人隱私信息等敏感字段,僅以“住院ID號(hào)”為特征區(qū)分病人,提取“生日”“性別”“職業(yè)”等自然信息和“主述”“現(xiàn)病史”“既往病史”“家族病史”“體格檢查”“病程記錄”等相關(guān)診療信息。
XML是一種元標(biāo)記語(yǔ)言,由于它是純文本格式,因此它可以對(duì)挖掘數(shù)據(jù)進(jìn)行描述并存儲(chǔ)。而且,XML需要交換的數(shù)據(jù)采用標(biāo)準(zhǔn)進(jìn)行表示與組織,系統(tǒng)只需在數(shù)據(jù)的內(nèi)部格式與數(shù)據(jù)標(biāo)準(zhǔn)之間進(jìn)行映射,極大地降低了數(shù)據(jù)集成的復(fù)雜度。HTML格式EMR文本內(nèi)容如圖3所示。經(jīng)轉(zhuǎn)換后的XML文本內(nèi)容如圖4所示。
本研究與筆者之前的“基于Flash+XML技術(shù)的臨床虛擬教學(xué)平臺(tái)”相結(jié)合,將EMR歷史真實(shí)數(shù)據(jù)轉(zhuǎn)化為平臺(tái)可用的標(biāo)準(zhǔn)XML文本,為虛擬教學(xué)平臺(tái)提供了大量真實(shí)病歷數(shù)據(jù),使虛擬教學(xué)平臺(tái)的服務(wù)能力得到了極大的提升。經(jīng)過(guò)篩選,平臺(tái)新增合格教學(xué)標(biāo)準(zhǔn)糖尿病病歷12個(gè),豐富了平臺(tái)的教學(xué)資源。新教學(xué)病歷擬經(jīng)專業(yè)指導(dǎo)教師進(jìn)行流程設(shè)計(jì)及醫(yī)學(xué)術(shù)語(yǔ)規(guī)范后,更新至虛擬教學(xué)平臺(tái),正式為臨床及護(hù)理專業(yè)學(xué)生提供教學(xué)服務(wù)。
本文研究的主要內(nèi)容有:Python爬蟲對(duì)EMR病歷數(shù)據(jù)的爬取技術(shù)與方法研究;EMR歷史數(shù)據(jù)結(jié)構(gòu)化存儲(chǔ)方法的研究。EMR歷史數(shù)據(jù)結(jié)合虛擬仿真實(shí)驗(yàn)教學(xué)平臺(tái)為醫(yī)學(xué)臨床教學(xué)提供服務(wù)。
將EMR數(shù)據(jù)中潛在的有價(jià)值的信息發(fā)掘出來(lái),既可以為醫(yī)學(xué)臨床教學(xué)提供更多更好的真實(shí)數(shù)據(jù),也可以更好地服務(wù)住院患者,分析出院患者;以及跟蹤重復(fù)入院患者,為提高以患者為中心的醫(yī)療服務(wù)水平作出貢獻(xiàn),為提高醫(yī)院的整體實(shí)力從技術(shù)上提供支撐。糖尿病作為一種常見的慢性疾病,其臨床癥狀及治療方法相對(duì)成型,EMR數(shù)據(jù)規(guī)律性相對(duì)較強(qiáng),因此,將其作為研究對(duì)象可從中找到EMR歷史數(shù)據(jù)結(jié)構(gòu)化方法并加以利用。今后,筆者還將以此為研究基礎(chǔ),對(duì)其他科室EMR歷史數(shù)據(jù)進(jìn)行深入研究,喚醒沉睡的數(shù)據(jù),為醫(yī)學(xué)教學(xué)及醫(yī)療服務(wù)提供參考。