韓晟,陳衍,彭紅波,張銘,葛煦
1.第四軍醫大學口腔醫院 a.信息科;b.醫教部,陜西 西安 710032;2.第四軍醫大學西京醫院 腫瘤科,陜西 西安 710032
隨著醫院信息系統(HIS)的發展,電子病歷的使用越來越普遍。從20世紀90年代開始,我國很多醫院使用電子病歷替代了紙質病歷。早期的電子病歷由于開發時間較早,沒有實現結構化。但是,經過多年的使用,非結構化電子病歷已經積攢了大量寶貴的臨床資料。如何從這些非結構化電子病歷中提取信息已經變得越來越迫切,并逐漸成為醫院信息化工作的一個重要部分。為此,本文提出了利用Lucene搜索引擎工具對非結構化文檔進行檢索的設計方案。
非結構化電子病歷不具備全文檢索功能。其主要功能始終停留在紙質病歷電子化程度上,僅具有記錄、存儲和調閱功能。對這樣的病歷系統,統計檢索工作主要圍繞病案首頁展開,即把患者的基本信息,如入院診斷、出院診斷、治療結果等主要醫療信息填寫在數據庫中,利用數據庫的統計和檢索功能進行相應的開發。當需要查詢的信息如果不在病案首頁涵蓋的范圍內,則必須由人工打開病歷逐一查找統計。為使非結構化電子病歷能方便地在“軍衛一號”系統中實現全文檢索功能,我們開發了基于Lucene搜索引擎的非結構化電子病歷檢索系統。
搜索引擎從誕生到現在不到20年時間,經過了一個短暫的雛形階段,就發展成熟了兩代產品。包括以人工目錄搜索為特點的第一代搜索引擎和以超鏈分析為基礎、機器自動處理的第二代搜索引擎。搜索引擎按照工作方式主要分為3類:基于爬蟲的自動搜索引擎、目錄索引搜索引擎和元搜索引擎。基于爬蟲的自動搜索引擎是目前真正意義上的搜索引擎,也是搜索引擎的主流[1-2]。目前,使用最多的Google、百度是其典型代表。不同的搜索引擎收錄的數據范圍不同,有的覆蓋全網信息、有的針對某一個領域專門處理。從搜索引擎信息覆蓋的領域和范圍來看,可以分為通用搜索引擎和垂直搜索引擎兩類。互聯網上的信息除了文字信息還有各種媒體內容,針對不同類型的信息,需要使用不同的搜索技術實現,如文字搜索引擎、音樂搜索引擎、視頻搜索引擎和圖像搜索引擎等[3]。
搜索引擎技術是互聯網資源導航和訪問的重要手段,但是對于一般開發者而言,搜索引擎的底層開發技術過于復雜,加上各大搜索引擎廠商對核心技術嚴格保密,使搜索引擎開發有很高的門檻。搜索引擎在普通應用系統中的普及,開源項目的推動作用功不可沒。進行全文檢索系統研發或者搜索引擎研發的開發者都用過或借鑒過開源搜索引擎的代碼或設計思路開源搜索引擎項目。主要的開源搜索引擎系統有Lucene全文檢索系統、Nutch系統、Compass和Labin系統。其中Lucene是一套全文檢索工具包,是一個開源代碼系統,是Apache軟件基金會的一個子項目,提供了一個全文檢索引擎的構架,完整的查詢引擎和索引引擎[4-5]。Lucene本身并不是一個完整的全文檢索引擎,但他的設計目的是為軟件開發人員提供一個開發工具包,以方便普通開發者在系統中實現全文檢索的功能。利用Lucene經過簡單設置就可以建立自己內部網的搜索引擎,也可以針對互聯網建立搜索引擎,還可以與數據庫結合建立索引。經過多年的發展,Lucene在全文檢索領域已經有了很多的成功案例,幾乎適合于任何需要全文檢索的應用,尤其是跨平臺的應用。另外,Lucene不但是一個高性能的全文檢索引擎,而且免費、開源。

圖1 病歷全文搜索引擎系統整體構架
3.1.1 搭建搜索引擎的網站平臺
Web 服務器是在網絡中為實現信息發布、資料查詢、數據處理等諸多應用搭建的基本平臺;Tomcat Server嚴格執行Servlet 和JSP 規范,是一個十分有用的網絡應用開發服務平臺。本項目是在Windows2003 Server系統中按照配置的Tomcat Server作為搜索引擎與用戶進行交互的。
3.1.2 索引模塊
本項目的文本索引只有Word結構的電子病歷,文本種類比較單一,所以在使用時僅調用Lucene的Word文本分析API即可。
3.1.3 檢索模塊
檢索模塊的主要功能是根據用戶輸入的關鍵詞在索引器形成的倒排表中進行檢索,同時完成頁面與檢索之間的相關度評價,對將要輸出的結果進行排序,并實現某種用戶相關性反饋機制。
利用Lucene的內在模塊,能夠簡單快速地搭建起全文搜索平臺,只需在程序中指定病歷文件的存儲位置并進行簡單的編程即可,此處不再贅述。
建立非結構化電子病歷“搜索平臺”后,本院研究人員對非結構化電子病歷進行了檢索測試。從1萬余名住院患者中搜尋口腔癌患者,并找到每個人不在病案首頁中記錄的屬性,如吸煙、分期、城鄉等。在使用搜索平臺之前,類似此項的工作,如果1個人需要整理將近2個月的時間才能完成,而且出錯的比例很大,還要花費大量時間反復查找和修正。在使用搜索平臺工作后,此項工作變得非常輕松,搜索一個關鍵詞后,還能在結果中繼續搜索,從檢索出的關鍵詞前后語義就能基本判斷該記錄是否有效,從而層層篩選,輕松完成納入和排出工作,極大地提高了臨床研究的工作效率。
Lucene中可以調用各種成熟的分詞算法和軟件包,用于解決索引建立過程的分詞問題。由于中文文檔十分復雜,計算機處理有很大的難度,雖然很多專家做了大量的工作,目前仍沒用完全解決中文分詞的問題。最突出的有兩個問題:
(1) 切分歧義識別。中文的切分歧義是指中文的一句話按照指定的算法可能有兩種或多種切分方法。這種情況如果沒有上下文和語境背景,即便是人工也無法判斷如何切分[6-8]。在本項目使用的分詞器中,就發現有類似的情況出現,如分別用“異常”、“異常腫大”在病歷文檔中搜索,結果見圖2~3。圖2顯示,搜索引擎把所有含有“異常”的文檔全部顯示出來,包括“未見異常”、“無異常”等。但是在圖3用“異常分泌”檢索中卻沒有搜索到任何文件。從顯示的紅色字體看出搜索引擎所用的分詞器沒有把“異常分泌”作為一個分詞,所以沒有對該詞建立索引。
(2)未收錄詞識別。新詞的出現,在短時間內無法收錄到字典中,如經常遇到的是人名、特定的產品型號、特定事物名稱等。特別在醫學領域中,新的診斷方式、新藥品等新技術手段層出不窮,這個問題會更加突出。
上述問題主要由中文分詞器引起,目前本項目使用的是自動分詞技術,基于自動切分的最大優點是沒有詞表維護成本、實現簡單;缺點是索引效率低,但對于中小型應用來說,基于2元語法的切分還是夠用的。目前比較大的搜索引擎的語言分析算法一般是基于以上兩個機制的結合[9]。
解決該問題的方法是在自動分詞的基礎上加入詞庫分詞,這樣就能逐漸積累常用醫學詞匯,滿足實際需要。

圖2 用“異常”作為關鍵詞檢索結果

圖3 用“異常分泌”作為關鍵詞在病歷文檔庫檢索結果
Lucene基于JAVA技術開發,構架該搜索引擎需要搭建包括Web服務器在內的一整套系統。雖然技術并不復雜,但是仍舊增加了推廣應用的復雜程度。本系統利用了“虛擬機”技術,不但節省了使用單位的硬件資源,而且能夠以一個“虛擬機”系統包的形式進行分發。這樣用戶同樣可以利用虛擬機技術對該系統包進行還原,直接還原整套系統,僅需根據實際網絡環境修改虛擬服務器IP地址即可。
綜上所述,該系統利用已有的成熟技術解決了各醫院長年積累的非結構化電子病歷無法檢索的問題[10]。該系統的建立,最大的意義在于為非結構化電子病歷的檢索難題提供了一個新思路。利用Lucene技術開發目前的檢索系統并不復雜,但是,如果要完全滿足臨床及科研的全部要求,該系統還略顯稚嫩,還需要利用JAVA技術開發包括統計、報表等一系列功能。所以,該系統還有很大的發展空間。
[1]車東.在應用中加入全文檢索功能-基于Java的全文索引引擎Lucene簡介[EB /OL].(2006-03-10)[2012-04-27].http://www.chedong.com/tech/lucene.html.
[2]李瑋,李利.Web搜索引擎與全文檢索技術[J].情報科學,2003,24(5):265-268.
[3]Owens SJ.Lucene tutorial[EB/OL].(2000-09)[2012-04-27].Http://www.lucenetutorial.com.
[4]Goetz B.The Lucene search engine:powerful,flexible and free[EB/OL].(2000-09-15)[2012-04-27].Http://www.javaworld.com/jw-09-2000/jw-0915-lucene.html.
[5]高琰,古士文,譚立球等.基于Lucene的搜索引擎設計與實現[J].微機發展,2004,14(10):27-30.
[6]孫西全,馬瑞芳,李燕靈.基于Lucene的信息檢索的研究與應用[J].情報理論與實踐,2006,29(1):125-128.
[7]王學松.Lucene+nutch搜索引擎開發[M].河北:人民郵電出版社,2008:185-186.
[8]夏立新,王忠義.基于XML的全文檢索原型系統的設計與實現[J].現代圖書情報技術,2007,(8):67-70.
[9]申兵一,鞏青歌.基于Lucene的PDF文檔文本解析的實現[J].信息與電腦,2009,(11):66.
[10]范開洲,楊鵬飛.基于ASP技術的通用電子病歷的研究[J].中國醫療設備,2008,23(3):30-32.