劉宏嘉,王靜,黃宇亮,李晨光,吳昊,馬文君,曹文田,張藝寶
1.北京大學醫學部醫學技術研究院,北京 100191;2.北京大學腫瘤醫院暨北京市腫瘤防治研究所放療科/惡性腫瘤發病機制及轉化研究教育部重點實驗室,北京 100142;3.浙江大學醫學院附屬邵逸夫醫院,浙江杭州 310202;4.北京大學物理學院,北京 100871
人工智能技術在醫學科研和臨床工作中得到越來越多的應用[1-4],不僅提高工作效率[5],而且減少了由于主觀因素和經驗水平導致的質量波動和地域差異[6-7]。對于放射治療專業而言,除了標準DICOM 格式的醫學圖像[8-9]、放療計劃[10-11]、劑量分布[12]等常用信息外,病歷中記錄的其他多模態信息也具有不可替代的數據價值[13-14]。
病歷是病人在醫院診斷治療全過程的原始記錄,包含首頁、病程記錄、檢查化驗結果、醫囑、手術記錄、護理記錄等。隨著醫學信息化的逐步推進,病歷也從曾經的紙質、光盤等粗放存儲演變成醫院信息系統(Hospital Information System,HIS)集中管理。但是,相比DICOM 格式的電子數據,HIS系統中存放的病歷信息缺乏統一標準,對大數據應用背景下的自動挖掘和分析整理帶來挑戰[15]。系統提供的有限功能已不能滿足科研對于批量查詢和聚合分析等“定制化”需求,而市面上又缺乏針對HIS系統開發的數據自動挖掘服務工具,進行數據整合時往往使用傳統人工方法進行整理。傳統人工整理方法不僅效率低下,而且容易發生遺漏或錯誤,影響樣本量的擴充和數據質量的保障[16]。作為訪問權限較低的終端用戶,如何在沒有醫院信息管理部門的配合下,安全、便捷地實現對批量病歷信息的自動匯總和分析,在大數據時代背景下對于臨床和科研工作具有重要意義。
本研究開發了一種基于Web 爬蟲技術的病歷信息聚合工具,并以大量病歷中的診斷報告信息篩選和血常規檢查結果的特定指標信息聚合為例進行驗證,同時與手工提取相關信息的過程作為參照進行對比驗證分析,結果表明相對于手工提取的過程,自動方法在提取效率和準確性相對于人工方法均有較大提升。
本工作基于北京大學腫瘤醫院的HIS病歷系統,在內部網絡環境下可通過患者身份編號、姓名等信息調取病歷文書、診斷報告等信息。該病歷查詢系統是一個ASP.NET 的Web 應用程序,普通用戶無法獲取病歷系統數據庫的直接訪問權限,也無法“定制”批量查詢和整理等系統尚未提供的特殊功能。而直接獲取信息的爬蟲方法難以繞過Web 應用程序的安全設計,同時也存在一定程度的安全風險。同時,為了節約計算資源,也為了探索日后本工作在利用小型計算設備的可能性,本工作在搭載了Raspbian(一種基于Debian 的Linux 操作系統)的樹莓派4ModelB上執行(硬件上使用樹莓派4B原生套件)。
為了解決訪問安全、自動化和實現特殊定制功能等問題,本工作采用Selenium 技術來聚合信息。程序基于Web 架構設計,采用名為Selenium 的Web應用程序測試的框架和Python 編程語言,通過瀏覽器來實現所需要的信息搜集。Selenium 作為Web 應用程序測試工具,能夠在近乎真實的瀏覽器中執行測試,模擬人類用戶操作。而Python 作為一種優秀的膠水語言,在利用Python 執行Selenium 工具時,可以對瀏覽器所能展示的數據進行方便的分析聚合。整體的程序架構圖如圖1所示,工作流程如圖2所示。

圖1 基于Web爬蟲的工具程序架構圖Fig.1 Program framework of Web-crawler-based tool

圖2 聚合工具的工作流程圖Fig.2 Workflow chart of aggregation tool
該聚合工具接收研究人員可定位的患者基本信息(病歷號、姓名等信息)以及所需信息項目名稱列表,模擬實際登錄過程,依次定位到患者信息所在頁面。其中根據頁面的DOM 樹結構,分析整個頁面是否包含所需信息以及哪些信息可以被訪問,返回所需的DOM 樹節點以及Xpath路徑。之后根據返回的節點和路徑來提取數據并根據預先定義的數據字典來判斷數據準確性,并以結構化方式(Python 數據字典)來進行儲存。最后按照研究人員的需求,或者將結果存儲為結構化文件,或者將結果接口與其它數據分析的腳本相連接,直接供研究使用。
本程序通過模擬瀏覽器操作來實現癌癥患者相關數據的批量查詢以及定位獲取,利用服務器后臺程序對獲取到的數據進行信息聚合,并按照指定的格式輸出所需數據的文件。驗證測試目標包括:(1)從既往肺癌、食管癌、乳腺癌等胸部放療患者病歷數據庫自動查詢并匯總發生放射性肺炎的病例,以及距離放射性肺炎發生的最近一次放療的時間;(2)對新入院患者的臨床血常規檢查報告的結果進行聚合。具體工作流程包括:(1)記錄并模擬人工查詢1例患者從授權進入到訪問包含所需數據頁面等全過程需要在Web 界面上執行的操作;(2)將上述操作映射為Selenium 操作語句(在本例下,執行的操作會進入到包含放射報告以及病歷文書的界面),同時封裝起來,暴露數據輸入為唯一變量患者號;(3)分析數據所在頁面網頁源代碼,找到目標數據所在的元素,映射為Selenium 操作語句以獲取所需數據(在本例下,需要獲取放射診斷報告欄目下的所有子報告以及病歷文書下的所有文檔);(4)利用Python 分析得到的數據。對于放射性肺炎測試目標,程序在得到的所有放射診斷報告中模糊搜索有關放射性肺炎的描述,判斷具體患者是否被診斷為放射性肺炎。如有,則繼續查詢從無到有的變化日期,并檢索該日期最近的若干病例文書,返回其中內容最多的文書(病歷文書是一個長期積累,通常新的文書會包含之前舊文書的內容),以備日后科研工作分析以及錯誤核驗。對于聚合新入院患者的臨床血常規報告,該工具將遍歷檢查表,從中按名稱判斷是否是所需要查詢的檢查,然后記錄該次檢查時間、負責醫生等信息,搜索表格中是否有所需的血常規子項目并記錄對應數據儲存到預設的數據結構中。最后將得到的數據按照需要的格式輸出,如以患者號命名的文本研究件形式,或者是便于導出導入的Numpy 數組格式等。
本工作成功開發了滿足圖1架構以及圖2所示工作流程的基于Web 爬蟲技術的病歷信息聚合工具。使用上述系統開發架構和工作流程建立的信息聚合工具成功自動登錄了HIS 系統,并在HIS 系統上的不同區域和路徑成功獲得指定患者所需的準確信息。
放射性肺炎病例的獲?。夯赪eb 爬蟲技術的病歷信息聚合工具從3 541 例患者中識別出110 例放射性肺炎病例。使用手動方法對這3 541 例患者進行識別與自動化方法對比,自動化方法每例患者耗時約為54 s,手動方法每例患者耗時約為90 s。
新入院患者的臨床血常規檢查報告的結果聚合:分析110例患者的血常規檢測報告,使用自動化方法平均約10 s完成單例患者血常規分析的數據收集,而如果使用人工方法則需要75 s或者更多的時間。
此外,由于自動化方法是從HIS系統中直接獲取結構化的病人信息,或是直接利用該信息進行判斷,從而準確性更高。相比之下,上述兩個驗證測試目標在人工實現的過程中均發現了錯誤,比如填寫報告數據遺漏和錯誤等。
測試驗證的結果表明,基于Web 爬蟲技術的病歷信息聚合工具在效率和準確性方面均遠勝于人工提取操作。值得注意的是,在不同需求背景下,自動工具的特點和優勢也不盡相同。在程序設計時需要充分考慮具體任務的特點,個性化優化流程和代碼。比如放射性肺炎病例的排除相比檢出相對復雜:前者需要遍歷所有的放射診斷報告,而后者只需在任一報告中發現有用信息即可停止檢索。本例中放射性肺炎的檢出發病率約為3.11%,而如果本程序用于搜索發病率更低、樣本量更大的病例,自動工具與人工方法的效率差異會被進一步放大。如果涉及不同頁面的切換,也會對結果產生秒級的影響。相比之下,第二個提取和整理血常規信息的例子相對簡單。原因之一是血常規的報告相對規范且客觀,沒有放射診斷報告中涉及的人工描述和主觀差異;原因之二是提取的信息主要是同一頁面上的檢驗報告,不涉及到切換頁面等耗時操作。如果報告內容涉及更多更復雜的數據,人工整理的效率和準確性會進一步降低,而對于自動化方法的影響僅在毫秒量級。
本工作的創新之處在于:(1)除了大幅縮短數據整理時間外,還實現了全程無人工干預的自動化流程;(2)由于使用了相對簡潔的 Python+Chromedriver+Selenium 套裝方案,本工具即使是在樹莓派這樣的微型機器上也能夠流暢運行,降低對計算設備的要求,節省算力成本;(3)該工具同時兼容多種圖形化工作界面,具有良好的跨平臺特性;(4)具有很高的查準率和查全率,降低復核數據的工作壓力;(5)兼具良好的安全性和靈活性,可以在沒有訪問原始數據庫權限的情況下,實現低權限場景下獲取數據,“定制”實現HIS系統中尚未提供的特殊功能。低權限場景下可以防止對HIS 系統進行篡改以及降低暴露數據漏洞的可能,體現出良好的安全性。
在未來更復雜的應用場景中,本工作可以進一步拓展和改進的方面包括:(1)在分析更大數據量以實現規模效益時,可以利用分布式計算技術來進一步壓縮執行時間。比如從該工具的系統架構入手,設計一個C-S(客戶端-服務端)結構的工具,在若干個設備或虛擬機上使用實際執行代碼的客戶端,而服務端則把執行邏輯以及需要查找的患者根據客戶端返回的運行狀況進行動態的調度。預計采用此方法可以進一步大幅降低規?;檎业臅r間,另外也可以實現不同設備之間的負載均衡,從而使得算力和網絡訪問資源被更高效的利用[17-18];(2)利用標準化接口降低該工具的耦合度[19-20]。以本研究中涉及的兩個應用為例,雖然系統架構是一致的,但是在檢索部分和分析部分分別使用了結構不盡相同的代碼。這一方面體現了該工具良好的可拓展性,但另一方面也對非信息科學專業的人員提出更高要求,增加了根據不同背景環境來更改、調試代碼所需的精力。因此,我們計劃在使用該工具進行更多場景的測試之后,總結出更普適性的數據搜集辦法。嘗試在一套工具里面標準化提取不同種類HIS 數據的接口,使得工具具有更好的用戶友好度,同時進一步降低該工具的耦合度,提升其可拓展性,以及與其他科研代碼的可整合性。
本工作成功開發并驗證了一套基于Web 爬蟲技術的病歷信息自動聚合工具,該工具具有安全、高效、準確、成本低、跨平臺、易拓展等特點,可以在較低訪問權限的情況下,“定制”實現臨床和科研工作所需的數據檢索、分類匯總等特殊功能,使得自動化技術在醫學中得到進一步發展和應用。