吳斌,徐哲,霍洪波
杭州電子科技大學(xué) 信息與控制研究所,浙江 杭州 310018
基于Lucene搜索引擎的醫(yī)技報告檢索模塊設(shè)計與實現(xiàn)
吳斌,徐哲,霍洪波
杭州電子科技大學(xué) 信息與控制研究所,浙江 杭州 310018
為了滿足影像醫(yī)生快速有效檢索歷史數(shù)據(jù)的需要,本文設(shè)計了一種基于Lucene搜索引擎的醫(yī)技報告檢索模塊嵌入放射科信息管理系統(tǒng)(RIS)。此模塊利用優(yōu)化的倒排索引技術(shù)對Lucene引擎進(jìn)行二次開發(fā),實現(xiàn)了醫(yī)技報告快速檢索功能。
放射科信息管理系統(tǒng);全文檢索;Lucene搜索引擎;倒排索引
隨著數(shù)字化醫(yī)院建設(shè)的不斷深入,放射科信息管理系統(tǒng)(RIS)在影像診斷活動中的應(yīng)用不斷擴(kuò)大[1-2],積累在RIS中的影像診斷信息也不斷增多。以國內(nèi)某三甲醫(yī)院為例,從20世紀(jì)90年代中期開始應(yīng)用RIS至今,每天獲得的RIS數(shù)據(jù)從幾十兆字節(jié)上升到幾百兆字節(jié)。其中包含能夠為當(dāng)前醫(yī)療科研活動提供借鑒作用的大量信息被封存在數(shù)據(jù)庫中,主要原因在于業(yè)務(wù)系統(tǒng)主要面向日常事務(wù)處理。系統(tǒng)雖具有一定的信息采集、查詢、統(tǒng)計、報表功能,但大量數(shù)據(jù)的組織和存儲都是圍繞事務(wù)處理進(jìn)行設(shè)計的,這樣的數(shù)據(jù)組織方式不利于對大規(guī)模的數(shù)據(jù)進(jìn)行分析??梢姡绾斡行Ю肦IS中的歷史數(shù)據(jù)已成為醫(yī)療信息技術(shù)人員所面臨的一個重要課題。
當(dāng)面對RIS中浩如煙海的醫(yī)療文本數(shù)據(jù)[3-4],為了能夠快速、準(zhǔn)確、有效、多角度地利用這些信息為影像醫(yī)生診斷、科研、教學(xué)提供便利,需要在RIS中增加醫(yī)技報告全文檢索模塊。傳統(tǒng)的查找技術(shù)是通過逐次匹配內(nèi)存中的文本實現(xiàn)的,即順序查找。對文檔集合中的信息進(jìn)行少量預(yù)處理或不做處理,這種方法只適合文檔較少的情況,雖然結(jié)構(gòu)簡單,易實現(xiàn),但檢索速度比較慢,尤其在處理海量數(shù)據(jù)和模糊查詢時有著明顯不足[5]。當(dāng)信息量在TB級別時,查找的速度是無法忍受的。本文采用優(yōu)化的倒排索引技術(shù),通過對第三方的全文檢索工具Lucene進(jìn)行二次開發(fā),實現(xiàn)對醫(yī)技報告的高效檢索,為醫(yī)療影像信息的使用提供便捷,進(jìn)而提升RIS的使用價值。
Lucene是使用Java實現(xiàn)的一個高性能、可擴(kuò)展的信息檢索工具庫[6-8]。它提供核心的索引和搜索模塊,支持包括中文等部分語言的文本分析,最終返回給用戶的是一個搜索結(jié)果集。
Lucene可以對任何格式的數(shù)據(jù)做索引和搜索。只要這些文件格式能被轉(zhuǎn)化為文字的形式,都可以通過Lucene的分析機(jī)制進(jìn)行識別。只要所給出的文件格式可以從中抽取出文字的內(nèi)容,就可以被Lucene加以使用,并對它們進(jìn)行索引以及搜索。它是一個能夠執(zhí)行一些功能的應(yīng)用程序,它把搜索引擎的索引、搜索等相關(guān)功能封裝成一套接口,利用這套接口再做一些實用程序嵌入到應(yīng)用之中,實現(xiàn)不同的功能,使用起來也非常簡單,并且實用性也好。
2.1 結(jié)構(gòu)設(shè)計
整個模塊結(jié)構(gòu)以B/S(Broswer/Server)模式設(shè)計。B/S模式的用戶界面完全通過WWW瀏覽器實現(xiàn),具有易學(xué)易用、操作友好的優(yōu)點。模塊采用標(biāo)準(zhǔn)的Web瀏覽器作為瀏覽檢索結(jié)果的操作界面,所有的操作都在同一個窗口中通過超文本鏈接完成,用戶可以方便地瀏覽信息和導(dǎo)航,使用簡單。
2.2 開發(fā)環(huán)境及工具
運用C#、EXTJS技術(shù)和SQL數(shù)據(jù)庫開發(fā)醫(yī)技報告檢索模塊。開發(fā)環(huán)境:操作系統(tǒng)選用Windows2000 Server,數(shù)據(jù)庫采用SQL Server 2008R2。開發(fā)工具選用Microsoft Visual Studio 2008和Dreamweaver CS4。
系統(tǒng)硬件選用Intel(R)Core(TM) i5-2004 CPU @3.10GHz的處理器,2.00GB內(nèi)存,32位操作系統(tǒng)。
2.3 功能設(shè)計
全文檢索模塊主要功能:按輸入關(guān)鍵詞在數(shù)據(jù)庫關(guān)鍵字段中進(jìn)行檢索,將查詢出來的文本關(guān)鍵詞用高亮顯示。整個模塊以Lucene搜索引擎為支撐,用優(yōu)化的倒排索引技術(shù)進(jìn)行二次開發(fā),實現(xiàn)快速檢索。
全文檢索模塊作用的文本數(shù)據(jù)是醫(yī)療影像數(shù)據(jù)庫RIS中的檢查報告。數(shù)據(jù)來源于RIS數(shù)據(jù)庫中的事實表EISReports。事實表EISReports包括ReportsIndex(報告編號)、ReportsDoctor(報告醫(yī)生)、ReportsTechnologies(影像所見)、ReportsConclusion(診斷結(jié)論)等條目。對表中信息不完全的和有明顯錯誤的條目經(jīng)刪除或清洗后加載到數(shù)據(jù)倉庫RIS_DW中。
3.1 倒排索引全文檢索原理
本模塊中醫(yī)技報告查詢功能以Lucene搜索引擎為支撐,為了實現(xiàn)快速檢索,Lucene采用倒排索引的數(shù)據(jù)結(jié)構(gòu)。Lucene的索引結(jié)構(gòu)可以分為索引(index)、索引段(segment)、索引文檔(document)、索引域(field)和索引項(term)5個層次。Lucene的索引過程可以分為3個階段:① 預(yù)處理階段,將數(shù)據(jù)轉(zhuǎn)換成Lucene能夠處理的格式——純文本字符流,先提取出文本信息,然后利用這些提取出來的數(shù)據(jù)創(chuàng)建Lucene的Document對象及其對應(yīng)的Field對象;② 分析階段,通過調(diào)用索引管理器(IndexWriter)的addDocument(Document)方法將數(shù)據(jù)傳遞給Lucene進(jìn)行索引操作,在對數(shù)據(jù)進(jìn)行索引處理時,Lucene會首先分析數(shù)據(jù),使之更加適合被索引;③ 寫入索引,對輸入數(shù)據(jù)分析完成后, 將結(jié)果寫入索引文件中,將輸人數(shù)據(jù)以倒排索引的數(shù)據(jù)結(jié)構(gòu)進(jìn)行存儲,索引建立后,Lucene通過IndexReader類來實現(xiàn)索引文檔的刪除、添加功能。
Lucene搜索引擎中倒排索引的創(chuàng)建、增量更新及檢索過程中,都需要在詞庫中進(jìn)行查找來實現(xiàn)分詞,尤其是創(chuàng)建和增量更新索引的過程中這種查找更是頻繁。詞庫的查找過程其實是一個典型的字典問題,一般有3類方法:①基于單詞比較(comparison based)的方法;② 基于表示法(representation based)的方法;③ 散列法,一種無需經(jīng)過任何比較,一次存取便能得到所查單詞位置的方法。本文選用一種絕對不產(chǎn)生沖突且能保持散列映射前后次序一致的有序保留最小完全散列函數(shù)(order preserving minimal perfect hash function,OPMPHF)。
完美哈希函數(shù)(perfect hash function,PHF)是可以確保在從n個鍵值的映射到一個整數(shù)所組成的集合時絕對不發(fā)生沖突的函數(shù)。其還可以用如下過程來表示:檢索某詞項是否在由若干個單詞構(gòu)成的集合S中及其所在位置。進(jìn)一步,假如哈希函數(shù)h:S→[0,m-1](n表示單詞集合的詞項個數(shù))是完美哈希函數(shù)并且m=n,則h就是最小MPHF。更進(jìn)一步地,如果一個最小MPHF的h具有針對A xi,xj∈S,i≤j<=>h(xi)≤h(xj)的保序的特性時,則h稱為有序保留最小完美哈希函數(shù)(OPMPHF)。
為了將n個詞項t(t∈S)映射成[0,m-1]之間的整數(shù),預(yù)先假定存在兩個一般的哈希函數(shù)h1(t)和h2(t),如式(1)和式(2):
其中m≥n,并且允許重復(fù)。
與這兩個函數(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 全文檢索的關(guān)鍵代碼
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());//搜索詞進(jìn)行分詞
Analyzer analyzer = new PanGuAnalyzer(true);//創(chuàng)建盤古分詞器對象
MultiFieldQueryParser parser = new MultiFieldQueryParser (INDEXFIELDS, analyzer);
Query query = parser.Parse(keywords);//搜索結(jié)果
Hits hits = searcher.Search(query);//通過hits來訪問相應(yīng)字段的數(shù)據(jù),并將搜到的條目的路徑都打印出來
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是要查找的索引字段。對于要查詢的關(guān)鍵字(keywords),首先判斷keywords的長度,如果長度為零,即關(guān)鍵字為空,直接返回?zé)o命中條目的結(jié)果。對不為空的關(guān)鍵詞,首先對關(guān)鍵字進(jìn)行分詞,然后構(gòu)造出Query對象并把這Query對象傳入到IndexSearcher的Search方法中進(jìn)行查詢,返回的結(jié)果保存在Hits對象中;再從Hits對象中讀取需要的信息返回給前臺程序。
在檢索模塊中,疾病類型選擇“消化系統(tǒng)疾病”,輸入關(guān)鍵詞“腹腔”,按“檢索”按鈕后可以看見在主列表中當(dāng)前頁顯示20條結(jié)果,在主列表下的條形欄可以看到一共查詢到1000條結(jié)果,分50頁顯示。結(jié)果包括報告編號、報告醫(yī)生和診斷結(jié)果等。點擊查看列表中的“查看”鏈接,可以展示相應(yīng)的診斷報告表。在檢索結(jié)果和診斷報告表中的關(guān)鍵詞“腹腔”高亮顯示。
在檢索模塊中顯示的結(jié)果主列表上方的條形欄中還顯示了此次查詢所花費的時間開銷為0.002 s。類似的,采用折半查找法實現(xiàn)的詞庫詞庫中針對檢索字“腹腔”同樣檢索出了1000條結(jié)果,但是其花費的時間開銷是0.395 s??梢姴捎谜郯氩檎曳▽崿F(xiàn)的詞庫查找速度與采用OPMPHF進(jìn)行詞庫查詢優(yōu)化的速度是難以相比擬的。
倒排索引全文檢索模塊在RIS醫(yī)技報告中的應(yīng)用,可以極大地方便影像醫(yī)生針對海量歷史檢查信息進(jìn)行快速查詢,其高效性和便捷性為影像醫(yī)生節(jié)約了大量的時間和精力,從而使RIS的可用性得到提升。但是僅限于關(guān)鍵字檢索顯然是不夠的,在接下來的研究中將考慮搜索的智能化,比如基于文本概念搜索及提供選擇匹配等功能。
[1] 唐震,朱銀民,施玲華.利用RIS/PACS管理影像科[J].中國醫(yī)療設(shè)備,2008,(2):73-74.
[2] 楊志安,張松,王亞杰,等.PACS/RIS助推學(xué)院型醫(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].計算機(jī)工程,2006,(4):94-96.
[6] 郭永利,盧穎穎.基于Lucene對文件全文檢索的研究與應(yīng)用[J].微型電腦應(yīng)用,2014,(1):51-54.
[7] Hatcher E,Gospodnetic O,Mccandless M.Lucene in action[Z]. Manning Publications Greenwich,CT,2004.
[8] 鄭榕增,林世平.基于Lucene的中文倒排索引技術(shù)的研究[J].計算機(jī)技術(shù)與發(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)資助。
本文作者:吳斌,在讀碩士研究生。
徐哲,碩士研究生導(dǎo)師。
通訊作者郵箱:xuzhe@hdu.edu.cn