彭紅波,韓晟,王婷婷
空軍軍醫(yī)大學(xué)第三附屬醫(yī)院 信息科,陜西 西安 710032
以電子病歷(Electronic Medical Records,EMR)為醫(yī)療信息載體的智慧醫(yī)療體系正在蓬勃發(fā)展[1]。初期,由于缺乏臨床信息系統(tǒng)支持,電子病歷首先是從病程記錄編輯器開(kāi)始發(fā)展的,期間經(jīng)歷了Word、半結(jié)構(gòu)化或結(jié)構(gòu)化等編輯器的過(guò)程演變[2],其存儲(chǔ)形式也豐富多樣,總體來(lái)說(shuō)可分為兩類:結(jié)構(gòu)化數(shù)據(jù)(即行數(shù)據(jù),存儲(chǔ)在數(shù)據(jù)庫(kù)里,可以用二維表結(jié)構(gòu)來(lái)邏輯表達(dá)實(shí)現(xiàn)的數(shù)據(jù))和非結(jié)構(gòu)化數(shù)據(jù)(指所有格式的XML、辦公文檔、HTML、文本、圖片、各類報(bào)表、視頻、音頻信息等,包含完全無(wú)結(jié)構(gòu)化數(shù)據(jù)及半結(jié)構(gòu)化數(shù)據(jù))[3]。
兩者并存的病歷存儲(chǔ)形式給醫(yī)生的檢索帶來(lái)了不便。首先,沒(méi)有統(tǒng)一的搜索入口,需要各自提供檢索操作。其次,檢索效率不高,特別是在數(shù)據(jù)量巨大且需要全文檢索時(shí),大量的全表掃描操作將嚴(yán)重影響數(shù)據(jù)庫(kù)的性能,檢索速度勢(shì)必下降。最后,傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)很難檢索處理非結(jié)構(gòu)化數(shù)據(jù),查準(zhǔn)率可想而知。針對(duì)上述問(wèn)題,我們提出了構(gòu)建一個(gè)簡(jiǎn)單、高效和異構(gòu)的電子病歷全文檢索平臺(tái),以高性能的Solr全文搜索引擎為基礎(chǔ),通過(guò)對(duì)電子病歷存儲(chǔ)格式的異構(gòu)處理,完成電子病歷內(nèi)容的索引化,從而實(shí)現(xiàn)電子病歷的全文檢索。
Solr是目前非常受歡迎的基于Apache開(kāi)源組織下Lucene開(kāi)發(fā)的一個(gè)開(kāi)源高性能的企業(yè)級(jí)搜索平臺(tái)。Solr具有高度可靠性、可擴(kuò)展性、可容錯(cuò)性的特點(diǎn),提供了分布式索引、索引備份、查詢負(fù)載均衡、自動(dòng)故障轉(zhuǎn)移和恢復(fù)以及集中配置等功能[4]。它能作為一個(gè)獨(dú)立完整的檢索服務(wù)器,提供基于REST的XML和JSON的索引和檢索API,以Web Service的形式集成到任意編程語(yǔ)言中使用[5]。
盡管電子病歷有著各種各樣的存儲(chǔ)形式,但是它存儲(chǔ)的內(nèi)容卻始終不會(huì)脫離文本的范圍[6]。而Solr最擅長(zhǎng)處理的就是以文本為中心的數(shù)據(jù)類型,因?yàn)樗阉饕媸菍iT(mén)用于將文本的隱含結(jié)構(gòu)抽取到索引中,從而改善搜索的。以文本為中心的數(shù)據(jù)意味著,文檔中的文本包含用戶在找尋時(shí)感興趣的信息[7]。病歷文本中包含的內(nèi)容恰恰就是醫(yī)生搜索時(shí)感興趣的信息,Solr作為一個(gè)非常成熟的全文檢索平臺(tái),能夠非常輕松地幫助醫(yī)生找到它。
2.1.1 系統(tǒng)架構(gòu)
電子病歷全文檢索系統(tǒng)主要實(shí)現(xiàn)對(duì)電子病歷的提取、索引和檢索,即根據(jù)用戶的查詢要求,從索引庫(kù)中檢索出相關(guān)信息資料[8]。它包含3個(gè)功能模塊:病歷提取模塊、索引創(chuàng)建模塊和用戶檢索模塊。各功能模塊之間的關(guān)系如圖1所示。

圖1 電子病歷全文檢索流程圖圖
2.1.2 功能模塊說(shuō)明
(1)病歷提取模塊。從電子病歷數(shù)據(jù)庫(kù)和電子病歷文件中提取患者基本信息、就診信息及病歷信息生成電子病歷JavaBean(一種JAVA語(yǔ)言寫(xiě)成的可重用組件)對(duì)象,然后再將電子病歷JavaBean對(duì)象轉(zhuǎn)化為統(tǒng)一格式的XML(可擴(kuò)展的標(biāo)識(shí)語(yǔ)言)病歷文檔[9]。其中電子病歷文件中的病歷信息是通過(guò)Apache Tika(一個(gè)通用的內(nèi)容分析工具)解析獲得的。
(2)索引創(chuàng)建模塊。將病歷提取模塊中生成的電子病歷JavaBean對(duì)象,通過(guò)SolrJ(一個(gè)使Java應(yīng)用程序可以輕松與Solr對(duì)話的API)提交到Solr服務(wù)器,再利用IKAnalyzer中文分詞器[10]切分病歷信息中詞語(yǔ),從而轉(zhuǎn)化為索引,形成索引文件。
(3)用戶檢索模塊。根據(jù)用戶提交的查詢請(qǐng)求,利用Solr提供的查詢解析器(默認(rèn)為L(zhǎng)ucene查詢解析器[11])將其轉(zhuǎn)化為查詢對(duì)象,最后查詢索引并返回滿足條件的結(jié)果列表。用戶可以點(diǎn)擊病歷編號(hào)查看完整的XML病歷文檔內(nèi)容。
2.2.1 系統(tǒng)平臺(tái)和開(kāi)發(fā)環(huán)境
本系統(tǒng)的平臺(tái)和開(kāi)發(fā)環(huán)境介紹如下[12]。操作系統(tǒng):Centos7 x86_64;開(kāi)發(fā)語(yǔ)言:Java;Solr版本:Solr 7.2.1;Web服務(wù)器:Apache Tomcat 8.5.28;開(kāi)發(fā)工具:MyEclipse 2015。
2.2.2 代碼設(shè)計(jì)
從功能模塊設(shè)計(jì)中可以看出,XML病歷文檔的生成和病歷索引庫(kù)的建立是整個(gè)系統(tǒng)的核心,其部分源代碼設(shè)計(jì),見(jiàn)圖2。

圖2 源代碼節(jié)選
2.2.3 用戶檢索界面
由于Solr搜索引擎自帶的檢索界面相對(duì)復(fù)雜,且需要一定的專業(yè)知識(shí)才能進(jìn)行操作,結(jié)果顯示也不太友好。因此,為了簡(jiǎn)化用戶的搜索操作,方便用戶直觀地看到搜索結(jié)果,我們將搜索界面設(shè)計(jì)如圖3所示。用戶只需要在搜索框內(nèi)輸入感興趣的詞語(yǔ),然后點(diǎn)擊搜索按鈕即可查看到返回的結(jié)果列表。

圖3 用戶檢索界面
本系統(tǒng)采用的是B/S架構(gòu)模式,這樣便省去了客戶端應(yīng)用程序安裝的煩惱,用戶只需要打開(kāi)瀏覽器輸入病歷檢索服務(wù)器的地址,完成權(quán)限驗(yàn)證后就可以輕松地進(jìn)行病歷的檢索操作。然而,操作的簡(jiǎn)單易行是否就滿足了醫(yī)生的應(yīng)用需求呢?為此,我們從3個(gè)方面進(jìn)行了評(píng)價(jià)。
(1)查詢效率[14]。對(duì)上述系統(tǒng)的性能與傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行對(duì)比,測(cè)試用數(shù)據(jù)量400萬(wàn)條。經(jīng)過(guò)100次統(tǒng)計(jì)測(cè)試,傳統(tǒng)的電子病歷檢索系統(tǒng)平均查詢時(shí)間為6376.7 ms,基于Solr的電子病歷全文檢索系統(tǒng)平均查詢時(shí)間為5.36 ms。可以看出,查詢效率的提升還是非常顯著的[5]。
(2)查準(zhǔn)率。查準(zhǔn)率在試圖回答這樣一個(gè)問(wèn)題:返回的這些文檔是不是我想要尋找的[7]?由于醫(yī)生病歷書(shū)寫(xiě)習(xí)慣的不同,在傳統(tǒng)的電子病歷檢索系統(tǒng)中搜索得到的病歷文檔常常并不是我們想要尋找的。如搜索病歷中包含有“齲齒”的患者,我們得到的病歷常常就會(huì)出現(xiàn)以下類似的信息:“齲齒”“未見(jiàn)明顯齲齒”“無(wú)齲齒”“其他齲齒”“繼發(fā)齲齒”等[15]。這樣的結(jié)果顯然不是醫(yī)生所需要的,因?yàn)檫@些病歷中包含的干擾信息太多。而基于Solr的電子病歷全文檢索系統(tǒng)卻可以排除這些干擾因素,它只需要醫(yī)生在檢索關(guān)鍵詞前加上一個(gè)“-”號(hào)就能輕松地實(shí)現(xiàn)病歷的過(guò)濾,且不受檢索詞語(yǔ)數(shù)量的限制,相信這樣返回的病歷文檔一定是醫(yī)生想要尋找的。病歷文檔數(shù)過(guò)濾前后對(duì)比如表1所示。
(3) 可擴(kuò)展性。由于本系統(tǒng)屏蔽了病歷存儲(chǔ)格式的差異,無(wú)論是結(jié)構(gòu)化的還是非結(jié)構(gòu)化的電子病歷[13],只要是它可以轉(zhuǎn)化為文本內(nèi)容,系統(tǒng)都能夠把它無(wú)縫接入,生成統(tǒng)一的XML病歷文檔,寫(xiě)入病歷索引庫(kù),進(jìn)而實(shí)現(xiàn)病歷的全文檢索。

表1 基于Solr的全文檢索平臺(tái)搜索齲齒患者的記錄數(shù)(條)
通過(guò)在醫(yī)院的應(yīng)用實(shí)踐,本系統(tǒng)達(dá)到了預(yù)期設(shè)計(jì)的目標(biāo)。它屏蔽了原有電子病歷的存儲(chǔ)格式[14],無(wú)論是新產(chǎn)生的或是舊的病歷數(shù)據(jù),系統(tǒng)都會(huì)定時(shí)自動(dòng)將其轉(zhuǎn)化為索引內(nèi)容,并寫(xiě)入病歷索引庫(kù)。它不僅簡(jiǎn)化了用戶的檢索操作,改善了病歷的檢索效率,而且還提高了病歷的查準(zhǔn)率,從而提升了用戶的檢索滿意度。同時(shí),也可以將檢索得到的結(jié)果數(shù)據(jù)導(dǎo)出,然后再通過(guò)專業(yè)的統(tǒng)計(jì)分析軟件做進(jìn)一步的科學(xué)研究。這不僅提高了電子病歷的利用率,也為醫(yī)生的科研統(tǒng)計(jì)工作帶來(lái)了極大的便利。在醫(yī)院管理方面,管理人員也可以利用本系統(tǒng)更加精準(zhǔn)地找到某類病種的患者信息,為臨床路徑提供決策支持[16]。當(dāng)然,本系統(tǒng)也存在著一些不足:① 除了電子病歷包含的數(shù)據(jù)外,缺少其他系統(tǒng)的數(shù)據(jù),如LIS(醫(yī)院檢驗(yàn)系統(tǒng))、PACS(醫(yī)學(xué)影像信息系統(tǒng))等;② 缺乏一些基本的統(tǒng)計(jì)分析功能,如性別比例、身份構(gòu)成比等;③ 某些病種的檢索條件都是固定不變的,然而在每次檢索的時(shí)候,這些條件卻需要重復(fù)錄入。在今后的應(yīng)用升級(jí)中,我們會(huì)逐步改進(jìn)。