劉宏嘉,王靜,黃宇亮,李晨光,吳昊,馬文君,曹文田,張藝寶
1.北京大學(xué)醫(yī)學(xué)部醫(yī)學(xué)技術(shù)研究院,北京 100191;2.北京大學(xué)腫瘤醫(yī)院暨北京市腫瘤防治研究所放療科/惡性腫瘤發(fā)病機(jī)制及轉(zhuǎn)化研究教育部重點(diǎn)實(shí)驗(yàn)室,北京 100142;3.浙江大學(xué)醫(yī)學(xué)院附屬邵逸夫醫(yī)院,浙江杭州 310202;4.北京大學(xué)物理學(xué)院,北京 100871
人工智能技術(shù)在醫(yī)學(xué)科研和臨床工作中得到越來(lái)越多的應(yīng)用[1-4],不僅提高工作效率[5],而且減少了由于主觀因素和經(jīng)驗(yàn)水平導(dǎo)致的質(zhì)量波動(dòng)和地域差異[6-7]。對(duì)于放射治療專業(yè)而言,除了標(biāo)準(zhǔn)DICOM 格式的醫(yī)學(xué)圖像[8-9]、放療計(jì)劃[10-11]、劑量分布[12]等常用信息外,病歷中記錄的其他多模態(tài)信息也具有不可替代的數(shù)據(jù)價(jià)值[13-14]。
病歷是病人在醫(yī)院診斷治療全過(guò)程的原始記錄,包含首頁(yè)、病程記錄、檢查化驗(yàn)結(jié)果、醫(yī)囑、手術(shù)記錄、護(hù)理記錄等。隨著醫(yī)學(xué)信息化的逐步推進(jìn),病歷也從曾經(jīng)的紙質(zhì)、光盤(pán)等粗放存儲(chǔ)演變成醫(yī)院信息系統(tǒng)(Hospital Information System,HIS)集中管理。但是,相比DICOM 格式的電子數(shù)據(jù),HIS系統(tǒng)中存放的病歷信息缺乏統(tǒng)一標(biāo)準(zhǔn),對(duì)大數(shù)據(jù)應(yīng)用背景下的自動(dòng)挖掘和分析整理帶來(lái)挑戰(zhàn)[15]。系統(tǒng)提供的有限功能已不能滿足科研對(duì)于批量查詢和聚合分析等“定制化”需求,而市面上又缺乏針對(duì)HIS系統(tǒng)開(kāi)發(fā)的數(shù)據(jù)自動(dòng)挖掘服務(wù)工具,進(jìn)行數(shù)據(jù)整合時(shí)往往使用傳統(tǒng)人工方法進(jìn)行整理。傳統(tǒng)人工整理方法不僅效率低下,而且容易發(fā)生遺漏或錯(cuò)誤,影響樣本量的擴(kuò)充和數(shù)據(jù)質(zhì)量的保障[16]。作為訪問(wèn)權(quán)限較低的終端用戶,如何在沒(méi)有醫(yī)院信息管理部門(mén)的配合下,安全、便捷地實(shí)現(xiàn)對(duì)批量病歷信息的自動(dòng)匯總和分析,在大數(shù)據(jù)時(shí)代背景下對(duì)于臨床和科研工作具有重要意義。
本研究開(kāi)發(fā)了一種基于Web 爬蟲(chóng)技術(shù)的病歷信息聚合工具,并以大量病歷中的診斷報(bào)告信息篩選和血常規(guī)檢查結(jié)果的特定指標(biāo)信息聚合為例進(jìn)行驗(yàn)證,同時(shí)與手工提取相關(guān)信息的過(guò)程作為參照進(jìn)行對(duì)比驗(yàn)證分析,結(jié)果表明相對(duì)于手工提取的過(guò)程,自動(dòng)方法在提取效率和準(zhǔn)確性相對(duì)于人工方法均有較大提升。
本工作基于北京大學(xué)腫瘤醫(yī)院的HIS病歷系統(tǒng),在內(nèi)部網(wǎng)絡(luò)環(huán)境下可通過(guò)患者身份編號(hào)、姓名等信息調(diào)取病歷文書(shū)、診斷報(bào)告等信息。該病歷查詢系統(tǒng)是一個(gè)ASP.NET 的Web 應(yīng)用程序,普通用戶無(wú)法獲取病歷系統(tǒng)數(shù)據(jù)庫(kù)的直接訪問(wèn)權(quán)限,也無(wú)法“定制”批量查詢和整理等系統(tǒng)尚未提供的特殊功能。而直接獲取信息的爬蟲(chóng)方法難以繞過(guò)Web 應(yīng)用程序的安全設(shè)計(jì),同時(shí)也存在一定程度的安全風(fēng)險(xiǎn)。同時(shí),為了節(jié)約計(jì)算資源,也為了探索日后本工作在利用小型計(jì)算設(shè)備的可能性,本工作在搭載了Raspbian(一種基于Debian 的Linux 操作系統(tǒng))的樹(shù)莓派4ModelB上執(zhí)行(硬件上使用樹(shù)莓派4B原生套件)。
為了解決訪問(wèn)安全、自動(dòng)化和實(shí)現(xiàn)特殊定制功能等問(wèn)題,本工作采用Selenium 技術(shù)來(lái)聚合信息。程序基于Web 架構(gòu)設(shè)計(jì),采用名為Selenium 的Web應(yīng)用程序測(cè)試的框架和Python 編程語(yǔ)言,通過(guò)瀏覽器來(lái)實(shí)現(xiàn)所需要的信息搜集。Selenium 作為Web 應(yīng)用程序測(cè)試工具,能夠在近乎真實(shí)的瀏覽器中執(zhí)行測(cè)試,模擬人類用戶操作。而Python 作為一種優(yōu)秀的膠水語(yǔ)言,在利用Python 執(zhí)行Selenium 工具時(shí),可以對(duì)瀏覽器所能展示的數(shù)據(jù)進(jìn)行方便的分析聚合。整體的程序架構(gòu)圖如圖1所示,工作流程如圖2所示。
圖1 基于Web爬蟲(chóng)的工具程序架構(gòu)圖Fig.1 Program framework of Web-crawler-based tool
圖2 聚合工具的工作流程圖Fig.2 Workflow chart of aggregation tool
該聚合工具接收研究人員可定位的患者基本信息(病歷號(hào)、姓名等信息)以及所需信息項(xiàng)目名稱列表,模擬實(shí)際登錄過(guò)程,依次定位到患者信息所在頁(yè)面。其中根據(jù)頁(yè)面的DOM 樹(shù)結(jié)構(gòu),分析整個(gè)頁(yè)面是否包含所需信息以及哪些信息可以被訪問(wèn),返回所需的DOM 樹(shù)節(jié)點(diǎn)以及Xpath路徑。之后根據(jù)返回的節(jié)點(diǎn)和路徑來(lái)提取數(shù)據(jù)并根據(jù)預(yù)先定義的數(shù)據(jù)字典來(lái)判斷數(shù)據(jù)準(zhǔn)確性,并以結(jié)構(gòu)化方式(Python 數(shù)據(jù)字典)來(lái)進(jìn)行儲(chǔ)存。最后按照研究人員的需求,或者將結(jié)果存儲(chǔ)為結(jié)構(gòu)化文件,或者將結(jié)果接口與其它數(shù)據(jù)分析的腳本相連接,直接供研究使用。
本程序通過(guò)模擬瀏覽器操作來(lái)實(shí)現(xiàn)癌癥患者相關(guān)數(shù)據(jù)的批量查詢以及定位獲取,利用服務(wù)器后臺(tái)程序?qū)Λ@取到的數(shù)據(jù)進(jìn)行信息聚合,并按照指定的格式輸出所需數(shù)據(jù)的文件。驗(yàn)證測(cè)試目標(biāo)包括:(1)從既往肺癌、食管癌、乳腺癌等胸部放療患者病歷數(shù)據(jù)庫(kù)自動(dòng)查詢并匯總發(fā)生放射性肺炎的病例,以及距離放射性肺炎發(fā)生的最近一次放療的時(shí)間;(2)對(duì)新入院患者的臨床血常規(guī)檢查報(bào)告的結(jié)果進(jìn)行聚合。具體工作流程包括:(1)記錄并模擬人工查詢1例患者從授權(quán)進(jìn)入到訪問(wèn)包含所需數(shù)據(jù)頁(yè)面等全過(guò)程需要在Web 界面上執(zhí)行的操作;(2)將上述操作映射為Selenium 操作語(yǔ)句(在本例下,執(zhí)行的操作會(huì)進(jìn)入到包含放射報(bào)告以及病歷文書(shū)的界面),同時(shí)封裝起來(lái),暴露數(shù)據(jù)輸入為唯一變量患者號(hào);(3)分析數(shù)據(jù)所在頁(yè)面網(wǎng)頁(yè)源代碼,找到目標(biāo)數(shù)據(jù)所在的元素,映射為Selenium 操作語(yǔ)句以獲取所需數(shù)據(jù)(在本例下,需要獲取放射診斷報(bào)告欄目下的所有子報(bào)告以及病歷文書(shū)下的所有文檔);(4)利用Python 分析得到的數(shù)據(jù)。對(duì)于放射性肺炎測(cè)試目標(biāo),程序在得到的所有放射診斷報(bào)告中模糊搜索有關(guān)放射性肺炎的描述,判斷具體患者是否被診斷為放射性肺炎。如有,則繼續(xù)查詢從無(wú)到有的變化日期,并檢索該日期最近的若干病例文書(shū),返回其中內(nèi)容最多的文書(shū)(病歷文書(shū)是一個(gè)長(zhǎng)期積累,通常新的文書(shū)會(huì)包含之前舊文書(shū)的內(nèi)容),以備日后科研工作分析以及錯(cuò)誤核驗(yàn)。對(duì)于聚合新入院患者的臨床血常規(guī)報(bào)告,該工具將遍歷檢查表,從中按名稱判斷是否是所需要查詢的檢查,然后記錄該次檢查時(shí)間、負(fù)責(zé)醫(yī)生等信息,搜索表格中是否有所需的血常規(guī)子項(xiàng)目并記錄對(duì)應(yīng)數(shù)據(jù)儲(chǔ)存到預(yù)設(shè)的數(shù)據(jù)結(jié)構(gòu)中。最后將得到的數(shù)據(jù)按照需要的格式輸出,如以患者號(hào)命名的文本研究件形式,或者是便于導(dǎo)出導(dǎo)入的Numpy 數(shù)組格式等。
本工作成功開(kāi)發(fā)了滿足圖1架構(gòu)以及圖2所示工作流程的基于Web 爬蟲(chóng)技術(shù)的病歷信息聚合工具。使用上述系統(tǒng)開(kāi)發(fā)架構(gòu)和工作流程建立的信息聚合工具成功自動(dòng)登錄了HIS 系統(tǒng),并在HIS 系統(tǒng)上的不同區(qū)域和路徑成功獲得指定患者所需的準(zhǔn)確信息。
放射性肺炎病例的獲?。夯赪eb 爬蟲(chóng)技術(shù)的病歷信息聚合工具從3 541 例患者中識(shí)別出110 例放射性肺炎病例。使用手動(dòng)方法對(duì)這3 541 例患者進(jìn)行識(shí)別與自動(dòng)化方法對(duì)比,自動(dòng)化方法每例患者耗時(shí)約為54 s,手動(dòng)方法每例患者耗時(shí)約為90 s。
新入院患者的臨床血常規(guī)檢查報(bào)告的結(jié)果聚合:分析110例患者的血常規(guī)檢測(cè)報(bào)告,使用自動(dòng)化方法平均約10 s完成單例患者血常規(guī)分析的數(shù)據(jù)收集,而如果使用人工方法則需要75 s或者更多的時(shí)間。
此外,由于自動(dòng)化方法是從HIS系統(tǒng)中直接獲取結(jié)構(gòu)化的病人信息,或是直接利用該信息進(jìn)行判斷,從而準(zhǔn)確性更高。相比之下,上述兩個(gè)驗(yàn)證測(cè)試目標(biāo)在人工實(shí)現(xiàn)的過(guò)程中均發(fā)現(xiàn)了錯(cuò)誤,比如填寫(xiě)報(bào)告數(shù)據(jù)遺漏和錯(cuò)誤等。
測(cè)試驗(yàn)證的結(jié)果表明,基于Web 爬蟲(chóng)技術(shù)的病歷信息聚合工具在效率和準(zhǔn)確性方面均遠(yuǎn)勝于人工提取操作。值得注意的是,在不同需求背景下,自動(dòng)工具的特點(diǎn)和優(yōu)勢(shì)也不盡相同。在程序設(shè)計(jì)時(shí)需要充分考慮具體任務(wù)的特點(diǎn),個(gè)性化優(yōu)化流程和代碼。比如放射性肺炎病例的排除相比檢出相對(duì)復(fù)雜:前者需要遍歷所有的放射診斷報(bào)告,而后者只需在任一報(bào)告中發(fā)現(xiàn)有用信息即可停止檢索。本例中放射性肺炎的檢出發(fā)病率約為3.11%,而如果本程序用于搜索發(fā)病率更低、樣本量更大的病例,自動(dòng)工具與人工方法的效率差異會(huì)被進(jìn)一步放大。如果涉及不同頁(yè)面的切換,也會(huì)對(duì)結(jié)果產(chǎn)生秒級(jí)的影響。相比之下,第二個(gè)提取和整理血常規(guī)信息的例子相對(duì)簡(jiǎn)單。原因之一是血常規(guī)的報(bào)告相對(duì)規(guī)范且客觀,沒(méi)有放射診斷報(bào)告中涉及的人工描述和主觀差異;原因之二是提取的信息主要是同一頁(yè)面上的檢驗(yàn)報(bào)告,不涉及到切換頁(yè)面等耗時(shí)操作。如果報(bào)告內(nèi)容涉及更多更復(fù)雜的數(shù)據(jù),人工整理的效率和準(zhǔn)確性會(huì)進(jìn)一步降低,而對(duì)于自動(dòng)化方法的影響僅在毫秒量級(jí)。
本工作的創(chuàng)新之處在于:(1)除了大幅縮短數(shù)據(jù)整理時(shí)間外,還實(shí)現(xiàn)了全程無(wú)人工干預(yù)的自動(dòng)化流程;(2)由于使用了相對(duì)簡(jiǎn)潔的 Python+Chromedriver+Selenium 套裝方案,本工具即使是在樹(shù)莓派這樣的微型機(jī)器上也能夠流暢運(yùn)行,降低對(duì)計(jì)算設(shè)備的要求,節(jié)省算力成本;(3)該工具同時(shí)兼容多種圖形化工作界面,具有良好的跨平臺(tái)特性;(4)具有很高的查準(zhǔn)率和查全率,降低復(fù)核數(shù)據(jù)的工作壓力;(5)兼具良好的安全性和靈活性,可以在沒(méi)有訪問(wèn)原始數(shù)據(jù)庫(kù)權(quán)限的情況下,實(shí)現(xiàn)低權(quán)限場(chǎng)景下獲取數(shù)據(jù),“定制”實(shí)現(xiàn)HIS系統(tǒng)中尚未提供的特殊功能。低權(quán)限場(chǎng)景下可以防止對(duì)HIS 系統(tǒng)進(jìn)行篡改以及降低暴露數(shù)據(jù)漏洞的可能,體現(xiàn)出良好的安全性。
在未來(lái)更復(fù)雜的應(yīng)用場(chǎng)景中,本工作可以進(jìn)一步拓展和改進(jìn)的方面包括:(1)在分析更大數(shù)據(jù)量以實(shí)現(xiàn)規(guī)模效益時(shí),可以利用分布式計(jì)算技術(shù)來(lái)進(jìn)一步壓縮執(zhí)行時(shí)間。比如從該工具的系統(tǒng)架構(gòu)入手,設(shè)計(jì)一個(gè)C-S(客戶端-服務(wù)端)結(jié)構(gòu)的工具,在若干個(gè)設(shè)備或虛擬機(jī)上使用實(shí)際執(zhí)行代碼的客戶端,而服務(wù)端則把執(zhí)行邏輯以及需要查找的患者根據(jù)客戶端返回的運(yùn)行狀況進(jìn)行動(dòng)態(tài)的調(diào)度。預(yù)計(jì)采用此方法可以進(jìn)一步大幅降低規(guī)?;檎业臅r(shí)間,另外也可以實(shí)現(xiàn)不同設(shè)備之間的負(fù)載均衡,從而使得算力和網(wǎng)絡(luò)訪問(wèn)資源被更高效的利用[17-18];(2)利用標(biāo)準(zhǔn)化接口降低該工具的耦合度[19-20]。以本研究中涉及的兩個(gè)應(yīng)用為例,雖然系統(tǒng)架構(gòu)是一致的,但是在檢索部分和分析部分分別使用了結(jié)構(gòu)不盡相同的代碼。這一方面體現(xiàn)了該工具良好的可拓展性,但另一方面也對(duì)非信息科學(xué)專業(yè)的人員提出更高要求,增加了根據(jù)不同背景環(huán)境來(lái)更改、調(diào)試代碼所需的精力。因此,我們計(jì)劃在使用該工具進(jìn)行更多場(chǎng)景的測(cè)試之后,總結(jié)出更普適性的數(shù)據(jù)搜集辦法。嘗試在一套工具里面標(biāo)準(zhǔn)化提取不同種類HIS 數(shù)據(jù)的接口,使得工具具有更好的用戶友好度,同時(shí)進(jìn)一步降低該工具的耦合度,提升其可拓展性,以及與其他科研代碼的可整合性。
本工作成功開(kāi)發(fā)并驗(yàn)證了一套基于Web 爬蟲(chóng)技術(shù)的病歷信息自動(dòng)聚合工具,該工具具有安全、高效、準(zhǔn)確、成本低、跨平臺(tái)、易拓展等特點(diǎn),可以在較低訪問(wèn)權(quán)限的情況下,“定制”實(shí)現(xiàn)臨床和科研工作所需的數(shù)據(jù)檢索、分類匯總等特殊功能,使得自動(dòng)化技術(shù)在醫(yī)學(xué)中得到進(jìn)一步發(fā)展和應(yīng)用。