APP下载

基于Lucene搜索引擎的医技报告检索模块设计与实现

2014-06-24吴斌徐哲霍洪波

中国医疗设备 2014年10期
关键词:全文检索词库医技

吴斌,徐哲,霍洪波

杭州电子科技大学 信息与控制研究所,浙江 杭州 310018

基于Lucene搜索引擎的医技报告检索模块设计与实现

吴斌,徐哲,霍洪波

杭州电子科技大学 信息与控制研究所,浙江 杭州 310018

为了满足影像医生快速有效检索历史数据的需要,本文设计了一种基于Lucene搜索引擎的医技报告检索模块嵌入放射科信息管理系统(RIS)。此模块利用优化的倒排索引技术对Lucene引擎进行二次开发,实现了医技报告快速检索功能。

放射科信息管理系统;全文检索;Lucene搜索引擎;倒排索引

0 前言

随着数字化医院建设的不断深入,放射科信息管理系统(RIS)在影像诊断活动中的应用不断扩大[1-2],积累在RIS中的影像诊断信息也不断增多。以国内某三甲医院为例,从20世纪90年代中期开始应用RIS至今,每天获得的RIS数据从几十兆字节上升到几百兆字节。其中包含能够为当前医疗科研活动提供借鉴作用的大量信息被封存在数据库中,主要原因在于业务系统主要面向日常事务处理。系统虽具有一定的信息采集、查询、统计、报表功能,但大量数据的组织和存储都是围绕事务处理进行设计的,这样的数据组织方式不利于对大规模的数据进行分析。可见,如何有效利用RIS中的历史数据已成为医疗信息技术人员所面临的一个重要课题。

当面对RIS中浩如烟海的医疗文本数据[3-4],为了能够快速、准确、有效、多角度地利用这些信息为影像医生诊断、科研、教学提供便利,需要在RIS中增加医技报告全文检索模块。传统的查找技术是通过逐次匹配内存中的文本实现的,即顺序查找。对文档集合中的信息进行少量预处理或不做处理,这种方法只适合文档较少的情况,虽然结构简单,易实现,但检索速度比较慢,尤其在处理海量数据和模糊查询时有着明显不足[5]。当信息量在TB级别时,查找的速度是无法忍受的。本文采用优化的倒排索引技术,通过对第三方的全文检索工具Lucene进行二次开发,实现对医技报告的高效检索,为医疗影像信息的使用提供便捷,进而提升RIS的使用价值。

1 全文检索引擎Lucene简介

Lucene是使用Java实现的一个高性能、可扩展的信息检索工具库[6-8]。它提供核心的索引和搜索模块,支持包括中文等部分语言的文本分析,最终返回给用户的是一个搜索结果集。

Lucene可以对任何格式的数据做索引和搜索。只要这些文件格式能被转化为文字的形式,都可以通过Lucene的分析机制进行识别。只要所给出的文件格式可以从中抽取出文字的内容,就可以被Lucene加以使用,并对它们进行索引以及搜索。它是一个能够执行一些功能的应用程序,它把搜索引擎的索引、搜索等相关功能封装成一套接口,利用这套接口再做一些实用程序嵌入到应用之中,实现不同的功能,使用起来也非常简单,并且实用性也好。

2 检索模块设计

2.1 结构设计

整个模块结构以B/S(Broswer/Server)模式设计。B/S模式的用户界面完全通过WWW浏览器实现,具有易学易用、操作友好的优点。模块采用标准的Web浏览器作为浏览检索结果的操作界面,所有的操作都在同一个窗口中通过超文本链接完成,用户可以方便地浏览信息和导航,使用简单。

2.2 开发环境及工具

运用C#、EXTJS技术和SQL数据库开发医技报告检索模块。开发环境:操作系统选用Windows2000 Server,数据库采用SQL Server 2008R2。开发工具选用Microsoft Visual Studio 2008和Dreamweaver CS4。

系统硬件选用Intel(R)Core(TM) i5-2004 CPU @3.10GHz的处理器,2.00GB内存,32位操作系统。

2.3 功能设计

全文检索模块主要功能:按输入关键词在数据库关键字段中进行检索,将查询出来的文本关键词用高亮显示。整个模块以Lucene搜索引擎为支撑,用优化的倒排索引技术进行二次开发,实现快速检索。

全文检索模块作用的文本数据是医疗影像数据库RIS中的检查报告。数据来源于RIS数据库中的事实表EISReports。事实表EISReports包括ReportsIndex(报告编号)、ReportsDoctor(报告医生)、ReportsTechnologies(影像所见)、ReportsConclusion(诊断结论)等条目。对表中信息不完全的和有明显错误的条目经删除或清洗后加载到数据仓库RIS_DW中。

3 检索模块的实现

3.1 倒排索引全文检索原理

本模块中医技报告查询功能以Lucene搜索引擎为支撑,为了实现快速检索,Lucene采用倒排索引的数据结构。Lucene的索引结构可以分为索引(index)、索引段(segment)、索引文档(document)、索引域(field)和索引项(term)5个层次。Lucene的索引过程可以分为3个阶段:① 预处理阶段,将数据转换成Lucene能够处理的格式——纯文本字符流,先提取出文本信息,然后利用这些提取出来的数据创建Lucene的Document对象及其对应的Field对象;② 分析阶段,通过调用索引管理器(IndexWriter)的addDocument(Document)方法将数据传递给Lucene进行索引操作,在对数据进行索引处理时,Lucene会首先分析数据,使之更加适合被索引;③ 写入索引,对输入数据分析完成后, 将结果写入索引文件中,将输人数据以倒排索引的数据结构进行存储,索引建立后,Lucene通过IndexReader类来实现索引文档的删除、添加功能。

Lucene搜索引擎中倒排索引的创建、增量更新及检索过程中,都需要在词库中进行查找来实现分词,尤其是创建和增量更新索引的过程中这种查找更是频繁。词库的查找过程其实是一个典型的字典问题,一般有3类方法:①基于单词比较(comparison based)的方法;② 基于表示法(representation based)的方法;③ 散列法,一种无需经过任何比较,一次存取便能得到所查单词位置的方法。本文选用一种绝对不产生冲突且能保持散列映射前后次序一致的有序保留最小完全散列函数(order preserving minimal perfect hash function,OPMPHF)。

完美哈希函数(perfect hash function,PHF)是可以确保在从n个键值的映射到一个整数所组成的集合时绝对不发生冲突的函数。其还可以用如下过程来表示:检索某词项是否在由若干个单词构成的集合S中及其所在位置。进一步,假如哈希函数h:S→[0,m-1](n表示单词集合的词项个数)是完美哈希函数并且m=n,则h就是最小MPHF。更进一步地,如果一个最小MPHF的h具有针对A xi,xj∈S,i≤j<=>h(xi)≤h(xj)的保序的特性时,则h称为有序保留最小完美哈希函数(OPMPHF)。

为了将n个词项t(t∈S)映射成[0,m-1]之间的整数,预先假定存在两个一般的哈希函数h1(t)和h2(t),如式(1)和式(2):

其中m≥n,并且允许重复。

与这两个函数一起,还需要一个特别的数组g,它将把0...m-1映射到0...n-1。给某个字符串t,采用OPMPHF h(t)的方法计算公式为:

这里+n表示加法执行后还需对n取模,即先把两个数相加,然后把这个数除以n,最后取余数。换句话说,首先计算两个非完美哈希函数的值,用映射g分别计算这两个哈希函数的值,然后将其相加后对n取模。如同变戏法一样,最后的哈希值确实就是字符串列表中的原位置。

3.2 全文检索的关键代码

public static List Search(string keywords)

{

List list = new List();//创建返回结果类集合

string indexDir = MyIndex.INDEX_DIR;//创建的索引存放的路径

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);//创建盘古分词器对象

MultiFieldQueryParser parser = new MultiFieldQueryParser (INDEXFIELDS, analyzer);

Query query = parser.Parse(keywords);//搜索结果

Hits hits = searcher.Search(query);//通过hits来访问相应字段的数据,并将搜到的条目的路径都打印出来

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对象中读取需要的信息返回给前台程序。

4 应用效果

在检索模块中,疾病类型选择“消化系统疾病”,输入关键词“腹腔”,按“检索”按钮后可以看见在主列表中当前页显示20条结果,在主列表下的条形栏可以看到一共查询到1000条结果,分50页显示。结果包括报告编号、报告医生和诊断结果等。点击查看列表中的“查看”链接,可以展示相应的诊断报告表。在检索结果和诊断报告表中的关键词“腹腔”高亮显示。

在检索模块中显示的结果主列表上方的条形栏中还显示了此次查询所花费的时间开销为0.002 s。类似的,采用折半查找法实现的词库词库中针对检索字“腹腔”同样检索出了1000条结果,但是其花费的时间开销是0.395 s。可见采用折半查找法实现的词库查找速度与采用OPMPHF进行词库查询优化的速度是难以相比拟的。

5 结语

倒排索引全文检索模块在RIS医技报告中的应用,可以极大地方便影像医生针对海量历史检查信息进行快速查询,其高效性和便捷性为影像医生节约了大量的时间和精力,从而使RIS的可用性得到提升。但是仅限于关键字检索显然是不够的,在接下来的研究中将考虑搜索的智能化,比如基于文本概念搜索及提供选择匹配等功能。

[1] 唐震,朱银民,施玲华.利用RIS/PACS管理影像科[J].中国医疗设备,2008,(2):73-74.

[2] 杨志安,张松,王亚杰,等.PACS/RIS助推学院型医院的发展[J].医院院长论坛,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的全文检索系统研究与开发[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].计算机技术与发展,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

猜你喜欢

全文检索词库医技
汕头市某专科医院青年医技人员工作满意度的研究
一“吃”多用
输入法词库取证比较研究
医技预约系统的实现与应用
输入法词库乾坤大挪移
Oracle数据库全文检索性能研究
全文检索引擎Lucene系统模型与应用研究
全文检索引擎技术在电子病历中的应用
预见性护理在医技检查护理工作中的应用及效果评价
将用户词库快速导入搜狗五笔词库