吳斌,徐哲,霍洪波
杭州電子科技大學 信息與控制研究所,浙江 杭州 310018
基于Lucene搜索引擎的醫(yī)技報告檢索模塊設計與實現(xiàn)
吳斌,徐哲,霍洪波
杭州電子科技大學 信息與控制研究所,浙江 杭州 310018
為了滿足影像醫(yī)生快速有效檢索歷史數(shù)據的需要,本文設計了一種基于Lucene搜索引擎的醫(yī)技報告檢索模塊嵌入放射科信息管理系統(tǒng)(RIS)。此模塊利用優(yōu)化的倒排索引技術對Lucene引擎進行二次開發(fā),實現(xiàn)了醫(yī)技報告快速檢索功能。
放射科信息管理系統(tǒng);全文檢索;Lucene搜索引擎;倒排索引
隨著數(shù)字化醫(yī)院建設的不斷深入,放射科信息管理系統(tǒng)(RIS)在影像診斷活動中的應用不斷擴大[1-2],積累在RIS中的影像診斷信息也不斷增多。以國內某三甲醫(yī)院為例,從20世紀90年代中期開始應用RIS至今,每天獲得的RIS數(shù)據從幾十兆字節(jié)上升到幾百兆字節(jié)。其中包含能夠為當前醫(yī)療科研活動提供借鑒作用的大量信息被封存在數(shù)據庫中,主要原因在于業(yè)務系統(tǒng)主要面向日常事務處理。系統(tǒng)雖具有一定的信息采集、查詢、統(tǒng)計、報表功能,但大量數(shù)據的組織和存儲都是圍繞事務處理進行設計的,這樣的數(shù)據組織方式不利于對大規(guī)模的數(shù)據進行分析。可見,如何有效利用RIS中的歷史數(shù)據已成為醫(yī)療信息技術人員所面臨的一個重要課題。
當面對RIS中浩如煙海的醫(yī)療文本數(shù)據[3-4],為了能夠快速、準確、有效、多角度地利用這些信息為影像醫(yī)生診斷、科研、教學提供便利,需要在RIS中增加醫(yī)技報告全文檢索模塊。傳統(tǒng)的查找技術是通過逐次匹配內存中的文本實現(xiàn)的,即順序查找。對文檔集合中的信息進行少量預處理或不做處理,這種方法只適合文檔較少的情況,雖然結構簡單,易實現(xiàn),但檢索速度比較慢,尤其在處理海量數(shù)據和模糊查詢時有著明顯不足[5]。當信息量在TB級別時,查找的速度是無法忍受的。本文采用優(yōu)化的倒排索引技術,通過對第三方的全文檢索工具Lucene進行二次開發(fā),實現(xiàn)對醫(yī)技報告的高效檢索,為醫(yī)療影像信息的使用提供便捷,進而提升RIS的使用價值。
Lucene是使用Java實現(xiàn)的一個高性能、可擴展的信息檢索工具庫[6-8]。它提供核心的索引和搜索模塊,支持包括中文等部分語言的文本分析,最終返回給用戶的是一個搜索結果集。
Lucene可以對任何格式的數(shù)據做索引和搜索。只要這些文件格式能被轉化為文字的形式,都可以通過Lucene的分析機制進行識別。只要所給出的文件格式可以從中抽取出文字的內容,就可以被Lucene加以使用,并對它們進行索引以及搜索。它是一個能夠執(zhí)行一些功能的應用程序,它把搜索引擎的索引、搜索等相關功能封裝成一套接口,利用這套接口再做一些實用程序嵌入到應用之中,實現(xiàn)不同的功能,使用起來也非常簡單,并且實用性也好。
2.1 結構設計
整個模塊結構以B/S(Broswer/Server)模式設計。B/S模式的用戶界面完全通過WWW瀏覽器實現(xiàn),具有易學易用、操作友好的優(yōu)點。模塊采用標準的Web瀏覽器作為瀏覽檢索結果的操作界面,所有的操作都在同一個窗口中通過超文本鏈接完成,用戶可以方便地瀏覽信息和導航,使用簡單。
2.2 開發(fā)環(huán)境及工具
運用C#、EXTJS技術和SQL數(shù)據庫開發(fā)醫(yī)技報告檢索模塊。開發(fā)環(huán)境:操作系統(tǒng)選用Windows2000 Server,數(shù)據庫采用SQL Server 2008R2。開發(fā)工具選用Microsoft Visual Studio 2008和Dreamweaver CS4。
系統(tǒng)硬件選用Intel(R)Core(TM) i5-2004 CPU @3.10GHz的處理器,2.00GB內存,32位操作系統(tǒng)。
2.3 功能設計
全文檢索模塊主要功能:按輸入關鍵詞在數(shù)據庫關鍵字段中進行檢索,將查詢出來的文本關鍵詞用高亮顯示。整個模塊以Lucene搜索引擎為支撐,用優(yōu)化的倒排索引技術進行二次開發(fā),實現(xiàn)快速檢索。
全文檢索模塊作用的文本數(shù)據是醫(yī)療影像數(shù)據庫RIS中的檢查報告。數(shù)據來源于RIS數(shù)據庫中的事實表EISReports。事實表EISReports包括ReportsIndex(報告編號)、ReportsDoctor(報告醫(yī)生)、ReportsTechnologies(影像所見)、ReportsConclusion(診斷結論)等條目。對表中信息不完全的和有明顯錯誤的條目經刪除或清洗后加載到數(shù)據倉庫RIS_DW中。
3.1 倒排索引全文檢索原理
本模塊中醫(yī)技報告查詢功能以Lucene搜索引擎為支撐,為了實現(xiàn)快速檢索,Lucene采用倒排索引的數(shù)據結構。Lucene的索引結構可以分為索引(index)、索引段(segment)、索引文檔(document)、索引域(field)和索引項(term)5個層次。Lucene的索引過程可以分為3個階段:① 預處理階段,將數(shù)據轉換成Lucene能夠處理的格式——純文本字符流,先提取出文本信息,然后利用這些提取出來的數(shù)據創(chuàng)建Lucene的Document對象及其對應的Field對象;② 分析階段,通過調用索引管理器(IndexWriter)的addDocument(Document)方法將數(shù)據傳遞給Lucene進行索引操作,在對數(shù)據進行索引處理時,Lucene會首先分析數(shù)據,使之更加適合被索引;③ 寫入索引,對輸入數(shù)據分析完成后, 將結果寫入索引文件中,將輸人數(shù)據以倒排索引的數(shù)據結構進行存儲,索引建立后,Lucene通過IndexReader類來實現(xiàn)索引文檔的刪除、添加功能。
Lucene搜索引擎中倒排索引的創(chuàng)建、增量更新及檢索過程中,都需要在詞庫中進行查找來實現(xiàn)分詞,尤其是創(chuàng)建和增量更新索引的過程中這種查找更是頻繁。詞庫的查找過程其實是一個典型的字典問題,一般有3類方法:①基于單詞比較(comparison based)的方法;② 基于表示法(representation based)的方法;③ 散列法,一種無需經過任何比較,一次存取便能得到所查單詞位置的方法。本文選用一種絕對不產生沖突且能保持散列映射前后次序一致的有序保留最小完全散列函數(shù)(order preserving minimal perfect hash function,OPMPHF)。
完美哈希函數(shù)(perfect hash function,PHF)是可以確保在從n個鍵值的映射到一個整數(shù)所組成的集合時絕對不發(fā)生沖突的函數(shù)。其還可以用如下過程來表示:檢索某詞項是否在由若干個單詞構成的集合S中及其所在位置。進一步,假如哈希函數(shù)h:S→[0,m-1](n表示單詞集合的詞項個數(shù))是完美哈希函數(shù)并且m=n,則h就是最小MPHF。更進一步地,如果一個最小MPHF的h具有針對A xi,xj∈S,i≤j<=>h(xi)≤h(xj)的保序的特性時,則h稱為有序保留最小完美哈希函數(shù)(OPMPHF)。
為了將n個詞項t(t∈S)映射成[0,m-1]之間的整數(shù),預先假定存在兩個一般的哈希函數(shù)h1(t)和h2(t),如式(1)和式(2):
其中m≥n,并且允許重復。
與這兩個函數(shù)一起,還需要一個特別的數(shù)組g,它將把0...m-1映射到0...n-1。給某個字符串t,采用OPMPHF h(t)的方法計算公式為:
這里+n表示加法執(zhí)行后還需對n取模,即先把兩個數(shù)相加,然后把這個數(shù)除以n,最后取余數(shù)。換句話說,首先計算兩個非完美哈希函數(shù)的值,用映射g分別計算這兩個哈希函數(shù)的值,然后將其相加后對n取模。如同變戲法一樣,最后的哈希值確實就是字符串列表中的原位置。
3.2 全文檢索的關鍵代碼
public static List
{
List
string indexDir = MyIndex.INDEX_DIR;//創(chuàng)建的索引存放的路徑
keywords = ManagerIndexSensitiveWords(keywords);//直接去掉敏感字
if (keywords.Length == 0)
{ searchCount = 0;
Expression = "";
return list;}
IndexSearcher searcher = new IndexSearcher(indexDir);//聲明一個指向索引目錄的搜索器對象
keywords = GetKeyWordsSplitBySpace(keywords, new PanGuTokenizer());//搜索詞進行分詞
Analyzer analyzer = new PanGuAnalyzer(true);//創(chuàng)建盤古分詞器對象
MultiFieldQueryParser parser = new MultiFieldQueryParser (INDEXFIELDS, analyzer);
Query query = parser.Parse(keywords);//搜索結果
Hits hits = searcher.Search(query);//通過hits來訪問相應字段的數(shù)據,并將搜到的條目的路徑都打印出來
searchCount = hits.Length();
for (int i = 0; i < hits.Length(); i++)
{MyModel c = new MyModel();
c.SID = int.Parse(hits.Doc(i).Get("SID"));
c.Title = hits.Doc(i).Get("TITLE");
c.Content = hits.Doc(i).Get("CONTENT");
list.Add(c); }
searcher.Close();
return list;
}
在上面的程序段中,INDEXFIELDS是要查找的索引字段。對于要查詢的關鍵字(keywords),首先判斷keywords的長度,如果長度為零,即關鍵字為空,直接返回無命中條目的結果。對不為空的關鍵詞,首先對關鍵字進行分詞,然后構造出Query對象并把這Query對象傳入到IndexSearcher的Search方法中進行查詢,返回的結果保存在Hits對象中;再從Hits對象中讀取需要的信息返回給前臺程序。
在檢索模塊中,疾病類型選擇“消化系統(tǒng)疾病”,輸入關鍵詞“腹腔”,按“檢索”按鈕后可以看見在主列表中當前頁顯示20條結果,在主列表下的條形欄可以看到一共查詢到1000條結果,分50頁顯示。結果包括報告編號、報告醫(yī)生和診斷結果等。點擊查看列表中的“查看”鏈接,可以展示相應的診斷報告表。在檢索結果和診斷報告表中的關鍵詞“腹腔”高亮顯示。
在檢索模塊中顯示的結果主列表上方的條形欄中還顯示了此次查詢所花費的時間開銷為0.002 s。類似的,采用折半查找法實現(xiàn)的詞庫詞庫中針對檢索字“腹腔”同樣檢索出了1000條結果,但是其花費的時間開銷是0.395 s??梢姴捎谜郯氩檎曳▽崿F(xiàn)的詞庫查找速度與采用OPMPHF進行詞庫查詢優(yōu)化的速度是難以相比擬的。
倒排索引全文檢索模塊在RIS醫(yī)技報告中的應用,可以極大地方便影像醫(yī)生針對海量歷史檢查信息進行快速查詢,其高效性和便捷性為影像醫(yī)生節(jié)約了大量的時間和精力,從而使RIS的可用性得到提升。但是僅限于關鍵字檢索顯然是不夠的,在接下來的研究中將考慮搜索的智能化,比如基于文本概念搜索及提供選擇匹配等功能。
[1] 唐震,朱銀民,施玲華.利用RIS/PACS管理影像科[J].中國醫(yī)療設備,2008,(2):73-74.
[2] 楊志安,張松,王亞杰,等.PACS/RIS助推學院型醫(yī)院的發(fā)展[J].醫(yī)院院長論壇,2011,(4):47-49.
[3] Nelson H.F.Beebe.A search strategy for large document bases[J].Electronic Publishing:Origination, Dissemination and Design,1988,1(2):105-116.
[4] Lacroix Z.Web data retrieval and extraction[J].Data&Knowledge Engineering,2003,44(3):347-367.
[5] 郎小偉,王申康.基于Lucene的全文檢索系統(tǒng)研究與開發(fā)[J].計算機工程,2006,(4):94-96.
[6] 郭永利,盧穎穎.基于Lucene對文件全文檢索的研究與應用[J].微型電腦應用,2014,(1):51-54.
[7] Hatcher E,Gospodnetic O,Mccandless M.Lucene in action[Z]. Manning Publications Greenwich,CT,2004.
[8] 鄭榕增,林世平.基于Lucene的中文倒排索引技術的研究[J].計算機技術與發(fā)展,2010,(3):80-83.
Design and Realization of Medical Reports Retrieve Module Based on Lucene Search Engine
WU Bin, XU Zhe, HUO Hong-bo
Institute of Information and Control Technology, Hangzhou Dianzi University, Hanzhou Zhejiang 310018, China
To meet radiologists’ requirements for rapid and eff i cient retrieving history data, this paper designed a Lucene search engine based medical report retrieval module to be embedded in radiology information system (RIS). Applying optimized inverted index to further develop the Lucene search engine, this module can retrieve medical reports rapidly.
RIS; full text retrieval; Lucene search engine; inverted index
TP311.52
A
10.3969/j.issn.1674-1633.2014.10.012
1674-1633(2014)10-0041-03
2014-04-09
2014-05-06
浙江省重大科技專項(2009C14035)資助。
本文作者:吳斌,在讀碩士研究生。
徐哲,碩士研究生導師。
通訊作者郵箱:xuzhe@hdu.edu.cn