侯天峰, 陸亞祥
(南京大學(xué)金陵學(xué)院 信息科學(xué)與工程學(xué)院,南京 210089)
一種全文檢索系統(tǒng)的研究與實(shí)現(xiàn)
侯天峰, 陸亞祥
(南京大學(xué)金陵學(xué)院 信息科學(xué)與工程學(xué)院,南京 210089)
網(wǎng)絡(luò)科技的飛速發(fā)展導(dǎo)致電子文檔的數(shù)量急劇膨脹,如何從大量的文檔中快速、準(zhǔn)確的獲取所需內(nèi)容成為一個(gè)當(dāng)前研究的熱點(diǎn)。在MVC模式以及Lucene架構(gòu)的基礎(chǔ)上,研究和實(shí)現(xiàn)了較為先進(jìn)的全文檢索系統(tǒng)。系統(tǒng)擴(kuò)展了檢索支持的文檔種類,改進(jìn)了對(duì)檢索結(jié)果的展現(xiàn)及訪問方式,提高了檢索系統(tǒng)便捷性及性能。
Lucene; 全文檢索; 文檔解析; 預(yù)覽
互聯(lián)網(wǎng)技術(shù)的發(fā)展,也是各種文本信息產(chǎn)生的過程。無論是查閱資料還是編輯文檔,其中文本信息是最基本和常用的信息形式,人們對(duì)文檔的處理越來越頻繁。如何從大量的文檔中快速、準(zhǔn)確地獲取用戶需要的信息資料成為一個(gè)急需解決的問題。由此,促使了信息檢索系統(tǒng)的出現(xiàn)和迅速發(fā)展[1,2]。
數(shù)據(jù)檢索能夠快速定位、檢索各種信息資源,在人們的生活和工作中都發(fā)揮著重要的作用,信息檢索的核心技術(shù)是全文檢索技術(shù)[3]。法律情報(bào)檢索系統(tǒng)是世界第一個(gè)全文檢索系統(tǒng),其由美國米德公司于1973 年發(fā)布[4],期間它得到了很多的改進(jìn),1959年剛被設(shè)計(jì)出來的時(shí)候僅僅用在了法律情報(bào)這一方面,面向的方向單一,系統(tǒng)功能也不是很完善。相對(duì)于西方國家,我國在全文檢索系統(tǒng)方面的起步較晚,由于中文是一種象形文字使得國外全文檢索軟件并不能很好地適用于我國用戶。國內(nèi)開發(fā)中文全文檢索系統(tǒng)主要采用關(guān)系數(shù)據(jù)庫的形式對(duì)數(shù)據(jù)進(jìn)行檢索[5],從嚴(yán)格意義上來講它并沒有真正地實(shí)現(xiàn)全文檢索的功能。
目前市場上有很多開源的檢索框架,如Egothor、Lucene、XQEngine等,Lucene[6]是Apache軟件基金會(huì)Jakarta項(xiàng)目組的一個(gè)子項(xiàng)目,是一個(gè)純Java編寫的開放源代碼的全文檢索工具[7]。它具有面向?qū)ο蟮奶攸c(diǎn),易于進(jìn)行二次開發(fā);在創(chuàng)建索引方面實(shí)現(xiàn)了分塊索引,提高了創(chuàng)建索引的效率;其支持多語言,可以針對(duì)不同的語言進(jìn)行檢索,并實(shí)現(xiàn)了一套強(qiáng)大的查詢引擎,用戶無需自己編寫代碼即使系統(tǒng)可獲得強(qiáng)大的查詢能力等等,上述優(yōu)點(diǎn)使得Lucene成為市場上最為流行的全文檢索工具。
1.1 系統(tǒng)結(jié)構(gòu)
本文對(duì)全文檢索系統(tǒng)運(yùn)行的基本原理和Lucene架構(gòu)[8,9]進(jìn)行了深入研究,熟悉了解系統(tǒng)結(jié)構(gòu)、文件格式、數(shù)據(jù)流,并結(jié)合SSH(Spring+Sruts+Hibernate)框架,提供了一個(gè)基于MVC分層思想的全文檢索模型。
系統(tǒng)實(shí)現(xiàn)了用戶動(dòng)態(tài)獲取待檢索文檔在Windows系統(tǒng)中的文檔路徑的功能,用戶可以根據(jù)自己文檔存放的位置進(jìn)行選擇路徑以及創(chuàng)建檢索。Lucene本身只能對(duì)純文本文檔建立索引,由于信息的廣泛性和文檔的多樣性,通常情況下,獲得的數(shù)據(jù)源并非一般的純文本格式[10]。例如TXT、PDF、DOC、HTML等,本系統(tǒng)能夠?qū)Χ喾N常見文檔進(jìn)行檢索,檢索完成后實(shí)現(xiàn)了的在線預(yù)覽功能,更為全面便捷地以滿足用戶的不同需求。系統(tǒng)結(jié)構(gòu),如圖1所示。
2.2 中文分詞器的選擇
Lucene工具包提供了幾個(gè)分詞接口,如KeywordAnalyzer、StandardAnalyzer和PerFieldAnalyzerWrapper等分析器,但是這些分詞器中只有StandardAnalyzer是能夠?qū)χ形倪M(jìn)行分詞,其他都是針對(duì)西方文字進(jìn)行分詞的。目前針對(duì)中
圖1 系統(tǒng)結(jié)構(gòu)
文分詞器的工具有:CJKAnalyzer、PaodingAnalyzer、IK_CAnalyzer等,其中PaodingAnalyzer在中文分詞耗時(shí)以及分詞結(jié)果等方面都更為出色,它對(duì)文檔進(jìn)行細(xì)粒度全切分以及二次分詞,能夠幾乎把所有的子詞都拆出來,這樣用戶在查詢文檔時(shí)就能夠?qū)崿F(xiàn)單字切分開進(jìn)行查詢。所以從分詞效果、性能、擴(kuò)展性、及可維護(hù)性等角度來綜合考量,本系統(tǒng)使用PaodingAnalyzer,以提高中文分詞的效率。
1.3 系統(tǒng)實(shí)現(xiàn)
1.3.1 文檔路徑選擇
系統(tǒng)使用了FileSystemView類提供的getFileSystemView()方法獲取Windows系的盤符,用于文檔磁盤的選擇,再通過File類提供的listFiles()方法對(duì)文件夾進(jìn)行遍歷,實(shí)現(xiàn)了一個(gè)類似于選擇文件的選取框。從而實(shí)現(xiàn)了用戶對(duì)文檔路徑的選擇。示例核心代碼如下:
1.3.2 多類型文檔解析
Lucene只定義了一個(gè)抽象文檔的結(jié)構(gòu)Document,沒有定義具體的數(shù)據(jù)源,按照條件查詢,得到所需要的結(jié)果。想要順利地被Lucene利用,需注意文檔以文字形式進(jìn)行正確的抽取,Lucene才能對(duì)其進(jìn)行索引以及搜索[11]。所以在對(duì)文檔進(jìn)行創(chuàng)建索引之前要將各種不同的文檔進(jìn)行內(nèi)容提取,
并轉(zhuǎn)換成Lucene可以識(shí)別的Document結(jié)構(gòu),因此需根據(jù)文檔格式的不同通過其對(duì)應(yīng)的轉(zhuǎn)換器進(jìn)行文檔內(nèi)容的轉(zhuǎn)換。例如POI組件可以實(shí)現(xiàn)對(duì)MS office格式文檔內(nèi)容的獲取,HTMLParser組件可以實(shí)現(xiàn)對(duì)HTML格式文檔內(nèi)容進(jìn)行獲取,PDF格式文檔可以通過PDFBOX組件抽取。本文通過引用組件技術(shù)實(shí)現(xiàn)了對(duì)多種格式文檔的內(nèi)容提取以及檢索,使得系統(tǒng)具有統(tǒng)一處理多格式文檔的能力。文檔解析模塊流程,如圖2所示。
圖2 文檔解析模塊流程
1.3.3 創(chuàng)建索引
在獲取和建立了有效的待搜索數(shù)據(jù)后,需要?jiǎng)?chuàng)建索引文件,然后就可以搜索文件。建立索引的步驟如下:
(1) 建立Field,就是包裝文檔中的不同數(shù)據(jù);
(2) 將所有的Field存入一個(gè)文檔中,即包裝文章;
(3) 將數(shù)篇文字整合,將多個(gè)文檔組織到一個(gè)IndexWriter中去,即可形成索引文件。
本系統(tǒng)規(guī)定了Field字段包含:題目(filename)、路徑(path)、內(nèi)容(content)。根據(jù)字段的屬性和輸出的要求,分別選取保存方式。
1.3.4 檢索文檔
當(dāng)用戶進(jìn)行查詢時(shí),檢索程序根據(jù)已經(jīng)建立的索引進(jìn)行查找,并將查找的結(jié)果反饋給用戶[12]。在這一步驟中IndexSearcher是能夠?qū)λ饕募M(jìn)行檢索的關(guān)鍵,由Query類封裝查詢字段、查詢?cè)~和語言分析器,交由IndexSearcher類查詢。當(dāng)通過Lucene提供給用戶的檢索接口檢索到含有檢索詞的文件時(shí),接口程序?qū)?shù)據(jù)庫中對(duì)應(yīng)文件名的所有記錄找到并顯示出來。檢索結(jié)果,如圖3所示。
圖3 檢索結(jié)果展示
1.3.5 在線預(yù)覽
考慮用戶瀏覽文檔的便捷性需求,系統(tǒng)實(shí)現(xiàn)了類似百度文庫的在線預(yù)覽功能。通過OpenOffice+JODConverter+Swftools+FlexPaper的方式完成,將DOC、TXT、PDF等格式的文檔轉(zhuǎn)換成swf格式的flash文檔,然后再通過flexpaper組件展示。
OpenOffice套件是一套o(hù)ffice工具,構(gòu)建于Sun的StarOffice代碼基礎(chǔ)上的開源產(chǎn)品,本文在該服務(wù)的基礎(chǔ)上對(duì)文檔進(jìn)行格式的轉(zhuǎn)換。在此基礎(chǔ)上,通過JODConverter轉(zhuǎn)換器將文檔轉(zhuǎn)換為PDF格式的文檔,通過Swftools工具提供的pdf2swf.exe對(duì)生成的PDF格式文檔進(jìn)行格式轉(zhuǎn)換,從而生成swf格式的flash文檔。
FlexPaper是開源輕量級(jí)的在瀏覽器上顯示swf格式文檔的組件,它與上述工具結(jié)合使得通過FlexPaper工具展現(xiàn)不同格式的文檔變得可能。以上組件的結(jié)合使用使得系統(tǒng)實(shí)現(xiàn)了極為便捷的在線預(yù)覽效果,當(dāng)用戶想查看某一文檔時(shí),無需多余操作,只需點(diǎn)擊檢索結(jié)果中的預(yù)覽按鈕即可,如圖4所示。
圖4 預(yù)覽效果展示
本文系統(tǒng)相較于傳統(tǒng)搜索服務(wù),除了具有上述功能及便捷性方面的優(yōu)勢(shì)外,在性能方面也具有優(yōu)勢(shì)。文章選取Windows系統(tǒng)自帶的搜索功能、應(yīng)用市場流行的多可文檔共享精靈與本文系統(tǒng)進(jìn)行檢索效率的對(duì)比分析。開發(fā)及實(shí)驗(yàn)軟硬件環(huán)境:CPU型號(hào)為酷睿i7-5500U 2.40GHz, 8GB內(nèi)存,Windows 8.1系統(tǒng)。
首先與Windows系統(tǒng)的搜索功能進(jìn)行比較。打開文檔所在文件夾,文檔包含多種格式,例如:DOC、TXT、PDF、HTML格式,文檔總大小為2.06MB。選擇對(duì)文檔名稱以及文檔內(nèi)容的搜索,輸入搜索的文件名稱“大學(xué)”,搜索結(jié)果的部分截圖,如圖5所示。用時(shí)約1.5秒,本文系統(tǒng)對(duì)該文件夾下的相同文檔進(jìn)行檢索,用時(shí)僅為736ms,在時(shí)間上優(yōu)于Windows系統(tǒng)自帶搜索服務(wù)。另外從搜索結(jié)果圖可以看出,Windows搜索出的結(jié)果不會(huì)展示出文檔的內(nèi)容,會(huì)給用戶帶來不便,本文系統(tǒng)則解決了這個(gè)問題。
圖5 Windows系統(tǒng)搜索結(jié)果圖
通過對(duì)多個(gè)文檔進(jìn)行檢索,來比較本系統(tǒng)與多可文檔共享精靈的檢索效率搜索結(jié)果,如圖6所示。實(shí)驗(yàn)準(zhǔn)備兩個(gè)用來檢測的文件夾,分別包含9.06 MB和20 MB的DOC、TXT、PDF、HTML混合格式文檔。在對(duì)9.06 MB文件夾進(jìn)行檢索時(shí),本文系統(tǒng)用時(shí)672 ms,多可文檔共享精靈花費(fèi)時(shí)間為736 ms,檢索結(jié)果的部分截圖如圖6所示。對(duì)20 MB文件夾檢索時(shí),本系統(tǒng)用時(shí)1487 ms,多可文檔共享精靈用時(shí)為1638 ms。測試結(jié)果,如表1所示。
表1 對(duì)多個(gè)文檔檢索耗時(shí)比較
上述兩組實(shí)驗(yàn)為混合格式的文檔檢索。第三組為兩份TXT格式的單一文檔檢索效率對(duì)比,兩份TXT文檔分別包含10萬與50萬字左右的漢字。檢索所用時(shí)間的測試結(jié)果,如表2所示:
圖6 多可文檔共享精靈檢索結(jié)果圖
由此可見,本文系統(tǒng)相對(duì)于傳統(tǒng)的檢索工具其功能及性能優(yōu)勢(shì)。系統(tǒng)在實(shí)際使用過程中,能夠便捷高效地滿足用戶的檢索需求。
表2 對(duì)單個(gè)文檔檢索耗時(shí)比較
文章在實(shí)現(xiàn)全文檢索的基礎(chǔ)上擴(kuò)展了實(shí)用功能,實(shí)現(xiàn)了對(duì)文檔內(nèi)容提取、文檔路徑選擇、多種類文檔檢索的支持、在線預(yù)覽等功能,更好地滿足了用戶的需求,并且系統(tǒng)在性能方面也具有一定的優(yōu)勢(shì),系統(tǒng)達(dá)到了預(yù)期的效果。后續(xù)會(huì)繼續(xù)研究相關(guān)改進(jìn):一是為檢索內(nèi)容添加權(quán)重,分為文檔標(biāo)題,文檔內(nèi)容和文檔路徑;二是改進(jìn)分詞技術(shù),選用高性能的中文分詞器以進(jìn)一步提高檢索的效率。
[1] 宋偉,彭智勇,王騫,等. Mimir:一種基于密文的全文檢索服務(wù)系統(tǒng)[J].計(jì)算機(jī)學(xué)報(bào), 2014(5):1170-1183.
[2] 楊輝. 全文檢索和MVC用于井場數(shù)據(jù)服務(wù)系統(tǒng)[J]. 油氣田地面工程, 2014(11):73-74.
[3] 孫西全,馬瑞芳,李燕靈.基于Lucene的信息檢索的研究與應(yīng)用[J].情報(bào)理論與實(shí)踐,2006,29(1):521-528.
[4] 武毅. 基于 Lucene.Net的全文檢索研究與應(yīng)用[D].長沙:國防科學(xué)技術(shù)大學(xué),2011.
[5] Levitin A. Introduction to the Design & Analysis of Algorithms[M]. Reading, MA:Addison-Wesley, 2003.
[6] 徐葉強(qiáng),朱艷輝,栗春亮.基于Lucene的海量數(shù)據(jù)庫全文檢索的設(shè)計(jì)與實(shí)現(xiàn)[J].湖南工業(yè)大學(xué)學(xué)報(bào),2011.25(2):81-82.
[7] 黃江平,黃理燦,徐玲.基于Lucene的PDF文檔的全文檢索的實(shí)現(xiàn)[J].工業(yè)控制計(jì)算機(jī), 2012,25(5):103.
[8] 義天鵬,陳啟安. 基于Lucene的中文分析器分詞性能比較研究. 計(jì)算機(jī)工程, 2012, 38(22):279-282.
[9] 秦杰,宋金玉,張廣星. 基于Lucene的本地搜索引擎研究與實(shí)現(xiàn)[J]. 計(jì)算機(jī)科學(xué), 2014, 41(z2).
[10] 岳濤 .漢語自動(dòng)分詞技術(shù)的最新發(fā)展及其在信息檢索中的應(yīng)用[J].情報(bào)雜志,2005,24(004):55-57.
[11] Wu J X, Zhang S L, Chen H Q,et al. Mining Weighted Association Rules with Lucene Index[C]. Wireless Communications, Networking and Mobile Computing,2007. Wi Com 2007. International Conference on.IEEE,2007:3697-3700.
[12] 吳青,夏紅霞,趙廣輝,等.基于Lucene全文檢索引擎的應(yīng)用與改進(jìn)[J].武漢理工大學(xué)學(xué)報(bào),2008,30(7):145-146.
Research and Implementation of a Full-text Retrieval System
Hou Tianfeng, Lu Yaxiang
(School of Information Science and Engineering, Nanjing University Jinling College, Nanjing 210089, China)
The rapid development of network technology has led to the rapid expansion of the number of electronic documents, how to quickly and accurately obtain the required content from a large number of documents has become a hot topic of current research. Based on MVC model and Lucene architecture, this system has been designed and implemented with a more advanced full-text retrieval performance. System extends the type of document retrieval support, improves the display and access method of the retrieval results, and improves the convenience and performance of the retrieval system.
Lucene; Full-text retrieval; Document analysis; Preview
侯天峰(1985-),男,廬江縣人,碩士,研究方向:圖像處理與分析。 陸亞祥(1990-),男,本科,專業(yè)方向:軟件工程。
1007-757X(2017)05-0052-04
TP311
A
2016.10.11)