亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Lucene對文件全文檢索的研究與應用

        2014-08-07 13:20:22郭永利盧穎穎
        微型電腦應用 2014年1期
        關鍵詞:全文檢索分詞文檔

        郭永利,盧穎穎

        基于Lucene對文件全文檢索的研究與應用

        郭永利,盧穎穎

        分析了Lucene的原理,針對Lucene的IndexReader、IndexSearcher、IndexWriter、Directory的各種不足,研究了不同優(yōu)化方案,并通過重寫源碼中的QueryParser限制效率低下的通配符查詢及模糊查詢,提高了搜索響應速度,最后,文章研究了Lucene的多個應用領域。

        搜索引擎;全文搜索;分詞;索引;優(yōu)化

        0 引言

        隨著網絡技術飛速發(fā)展,產生了大量數字信息,如何從這浩如煙海的文本信息中快速而又準確地獲取想要的信息,成為人們關注的焦點,也一直是國內外不斷研究的課題,因此,全文檢索技術成為國內外學者研究的熱點。

        1 全文檢索技術的研究現狀

        全文檢索的主要目的是建立索引與快速查詢,以便能使用戶快速從海量的信息中搜索出符合條件的信息。當前文本檢索有3種建索引方式:倒排索引、下標數組和簽名文件,其中最常用的是倒排索引。雖然國外的全文檢索軟件研究的較早,技術較先進,應用也較廣泛,但對中國用戶確有很多不適用之處[1]。中文以其獨特的單字成詞、多字成詞、詞前詞后加字或詞亦能成詞,使得中文分詞的實現比西文分詞更為復雜,中文分詞算法成為全文檢索技術中的一大難題。

        目前最流行的全文檢索技術是Lucene,由于Lucene具有開放性及擴展性等優(yōu)勢,所以利用Lucene建立電子公文檢索系統(tǒng),一方面可以真正的實現全文檢索,另一方面也可以在成本比較低的情況下擴充其功能。

        2 Lucene的原理分析

        2.1 分詞概述

        不同的語言有不同的分詞,對于中國人來說主要關注的是中文分詞。中文分詞比英文分詞要困難、復雜的多,具體表現在:

        (1)在英文中,因其由單詞構成句子,單詞間以空格隔開,而句子之間又能以標點符號隔開,因此英文分詞相對簡單。

        (2)在中文里,由于其特殊的語法,可以單字成詞,多字成詞,單字的左右兩邊分別加上其他的字也可能成詞,因此“詞”和“詞組”邊界模糊。

        中文分詞基本算法主要有:基于詞典的方法、基于統(tǒng)計的方法、基于規(guī)則的方法。其中基于詞典的方法包括正向最大匹配算法、逆向最大匹配、雙向最大匹配[2]。MMSeg中文分詞算法是基于正向最大匹配的算法,算法描述如下:

        步驟1:對文章基于詞典進行切割,獲得chunks。

        步驟2:使用規(guī)則1過濾chunks,判斷過濾后的chunks個數是否大于或等于2。是:進入步驟3,否:進入步驟7。

        步驟3:使用規(guī)則2過濾chunks,判斷過濾后的chunks個數是否大于或等于2。是:進入步驟4,否:進入步驟7。

        步驟4:用規(guī)則3過濾chunks,判斷過濾后的chunks個數是否大于或等于2。是: 進入步驟5,否:進入步驟7。

        步驟5:用規(guī)則4過濾chunks,判斷過濾后的chunks個數是否大于或等于2。是: 進入步驟6,否:進入步驟7。

        步驟6:拋出一個表示歧義的異常。

        步驟7:分詞成功。

        2.2 Lucene索引

        (1)Lucene索引文件分析

        Lucene采用文件的方式保存索引的信息,文件格式主要有:segment,.fnm,.fdx,.fdt,.tii,.tis,deletable,cfs等[3-4]。每個segment代表Lucene的一個完整索引段。.fnm格式的文件包含了Document中的所有Field名稱。.fdx和.fdt是綜合使用的兩類文件,其中.fdt類型文件用于存儲具有Store.YES屬性的Field數據。而.fdx類型文件則是一個索引,用于存儲Document信息。.tis文件用于存儲分詞后的詞條(Term),而.tii就是它的所有文件,它標明了每個.tis文件中詞條的位置。deletable格式用于對刪除的文件留一條記錄,該記錄被刪除時,才將索引除去。

        復合索引格式用于索引的內容可能非常大,文件數量可能非常多的情況。如果遇到這種情況,系統(tǒng)打開文件的數量巨大將會極大地耗費系統(tǒng)資源。因此,Lucene提供了一個單文件索引格式(復合索引格式)。

        (2)倒排索引

        在日常的檢索中,通常都是按照關鍵詞進行搜索的,所以,倒排索引可以更好地適合這種檢索機制的需要,這也是倒排索引如今被大規(guī)模使用的原因[5-6]。

        倒排索引用到的數據結構如下:

        class WordInfo

        {

        int articleId;

        int count;

        List location = new ArrayList();

        }

        Map> map = new HashMap>();

        WordInfo記錄了分詞的位置信息與分詞的個數,Map中的鍵值表示了分詞內容。算法描述:

        步驟1:將文章進行分詞,并將分詞保存到隊列中。

        步驟2:判斷分詞隊列是否為空。是: 算法結束,否:進入步驟3。

        步驟3:取出隊首分詞,判斷該分詞是否已經被存儲。是:進入步驟5,否:進入步驟4。

        步驟4:創(chuàng)建一個用于保存此分詞信息的哈希表。進入步驟5。

        步驟5:判斷該分詞的文章號是否已經被存儲。是:進入步驟7,否:進入步驟6。步驟6:創(chuàng)建一個用于保存該文章分詞信息的哈希表。步驟7:保存該分詞在該文章中出現的位置,并將其個數加一。

        步驟8:返回步驟2。

        2.3 Lucene搜索

        搜索功能定義:Lucene搜索就是通過已經建立好的索引,根據用戶要搜索的關鍵詞,將匹配的信息返回給用戶。

        TermQuery對索引中特定項進行搜索,是最基本的搜索方式。Term是最小的索引片段,每個Term包含了一個域名和一個文本值。

        Term term = new Term(“content”,”java”);

        Query query= new TermQuery(term);

        使用這個TermQuery對象進行搜索,可以返回在content域中包含單詞“java”的所有文件。值得注意的是,該查詢值是區(qū)分大小寫的,因此搜索前一定要對索引后的項的大小寫進行匹配。TermQuery類在根據關鍵詞查詢文件時顯得特別適用,具體的創(chuàng)建步驟為:

        (1)創(chuàng)建Directory

        (2)創(chuàng)建IndexReader

        (3)創(chuàng)建IndexSearcher

        (4)創(chuàng)建Term和TermQuery

        (5)根據TermQuery獲取TopDocs

        (6)根據TopDocs獲取ScoreDoc

        (7)根據ScoreDoc獲取相應文件

        Lucene中的查詢功能是非常強大的,它包含了項查詢、區(qū)間查詢、條件查詢等各式各樣的查詢功能,并且可以由用戶方便的擴展查詢功能。Lucene中自帶的查詢類主要有:TermRangeQuery、NumericRangeQuery、PrefixQuery、BooleanQuery、PhraseQuery、WildcardQuery、FuzzyQuery、Queryparser等。

        2.4 Lucene評分

        查詢q相對于文檔d的分數與在文檔和查詢向量之間的余弦距離或者點乘積有關系,文檔和查詢向量存于一個信息檢索(的向量空間模型)之中。一篇文檔的向量與查詢向量越接近,它的得分也越高,如公式(1):

        其中tf(t in d) 與term的出現次數有關系,term的次數越多的文檔將獲得越高的分數。缺省的tf(t in d)算法實現在DefaultSimilarity類中,如公式(2):

        idf(t) 代表反轉文檔頻率。這個分數與反轉的docFreq有關系。缺省idf(t in d)算法實現在DefaultSimilarity類中,如公式(3):

        coord(q,d) 是一個評分因子,在搜索的時候起作用,它在Similarity對象的coord(q,d)函數中計算。

        queryNorm(q) 是一個修正因子,用來使不同查詢間的分數更可比較。缺省queryNorm(q)算法實現在DefaultSimilarity類中,如公式(4):

        sumOfSquaredWeights(查詢的terms)是由查詢Weight對象計算的,例如一個布爾條件查詢的計算公式如公式(5):

        t.getBoost() 是一個搜索時的代表查詢q中的term t的boost數值,查詢里的一個term的boost值的訪問是通過調用子查詢的getBoost()方法實現的。

        norm(t,d) 是提煉取得一小部分boost值(在索引時間)和長度因子。計算方法如公式(6):

        3 Lucene 優(yōu)化

        3.1 IndexReader優(yōu)化

        Indexreader不應當頻繁構建,因為每構建一個IndexRe ader實例,都要對索引目錄中的索引文件重新加載一遍,不僅增大了服務器的負擔,而且大大降低了搜索響應時間。系統(tǒng)中應將IndexReader保存為單例,維持一個IndexReader。并通過采用IndexReader.openIfChanged(IndexReader oldRea der)的方式來獲得最新的索引。當索引目錄改變時,此方法可以避免加載全部索引,而是只加載更新部分的索引,并且返回最新的索引實例。系統(tǒng)中如果索引沒有變化,IndexRe ader.openIfChanged會返回null。因此相對于開啟新的Index Reader,該方法成本更低。

        3.2 IndexSearcher優(yōu)化

        用IndexReader做為參數構造IndexSearcher時,把reader設為只讀,通過避免并發(fā)檢查,可以提高性能。而盡可能減少IndexSearcher的創(chuàng)建和對搜索結果的前臺的緩存也是必要的。

        3.3 IndexWriter優(yōu)化

        對IndexWriter進行緩存,讓程序中只有一個IndexWriter實例。因為IndexWriter 是對索引庫目錄下的文件進行操作,就算在多線程情況下,每次也只會有一個線程在訪問這個文件。通過在查詢中復用,可以大幅度提高搜索的速度,因為每次打開,都會進行索引的加載,影響了性能,對它進行緩存后等于對查詢進行了預熱。因此,程序中沒必要維持多個 IndexWriter實例。

        3.4 Directory優(yōu)化

        Directory分為FSDirectory和RAMDirectory。FSDirectory 速度相對慢,但是 FSDirectory 的優(yōu)點是能夠在磁盤上持久化數據。RAMDirectory 讀寫數據的速度明顯要快,但是缺點是數據在程序退出時就沒有了。而且受限制于內存的大小。因此可以將兩者進行結合,在程序啟動的時候,將磁盤上的索引庫加載到內存中來。在程序退出的時候或指定一個時機,將內存中的索引庫數據狀態(tài)同步到硬盤上。

        3.5 自定義QueryParser優(yōu)化

        由于某些查詢方式(FuzzyQuery,WildcardQuery)會降低查詢的性能,所以考慮將這些查詢取消。并且在具體的查詢時,很有可能有這樣一種需求:需要獲取的是一個數字的范圍查詢。所以必須擴展原有的QueryParser才能進行查詢。

        實現思路:繼承QueryParser類,并且重載相應方法從而達到限制性能低的查詢方式及擴展居于數字和日期的查詢的目的。

        4 Lucene應用

        經過多年的發(fā)展,Lucene全文檢索以其高效的搜索響應速度,成功滲透進入各行各業(yè),并積累了良好的聲譽。本文研究了Lucene在Krugle源碼搜索網站中的應用、在LinkedIn.com社區(qū)網絡中的應用、在網絡教學中的應用、在醫(yī)學知識搜索系統(tǒng)中的應用、Lucene在電子檔案檢索系統(tǒng)中的應用及在SIREn中的應用,以下詳細介紹Lucene前四個方面的應用。

        4.1 在Krugle源碼搜索網站中的應用

        Krugle是一個源代碼搜索引擎,連續(xù)提供了4000多個開源項目[7]。Krugle是在Lucene基礎上搭建的,但由于這里的搜索文件內容都是由代碼構成的,這樣會為搜索引擎帶來一些有趣的挑戰(zhàn)。舉例來說,當搜索“indexSearcher”時,程序必須匹配源代碼中諸如“IndexSearcher”等語匯單元。諸如“=”和“(”等標點符號的搜索可能會在其他搜索網站的分析過程中被忽略,而這里卻必須要進行小心處理,以便能搜索到諸如“for(int x=0”等預期結果。與自然語言中通常用停用詞來區(qū)分各個項所不同的是,Krugle必須保留源代碼中所有這些語匯單元。

        4.2 在LinkedIn.com社區(qū)網絡中的應用

        LinkedIn.com是世界上最大的專業(yè)社區(qū)網絡,其用戶總數超過6000萬,該社區(qū)的主要功能就是“搜索人”,Lucene加強了LinkedIn的搜索功能。LinkedIn有兩個強大的Lucene擴展,分別為Zoie與Bobo Browse。Zoie是一個基于Lucene構建的實時搜索系統(tǒng)。Bobo Browse它能提供分組信息搜索功能,它的開源代碼庫是基于Lucene構建的,并能對任何基于Lucene的項目添加分組功能。它的索引是由簡單的Lucene索引加上一些有關如何將域用于支持分組搜索的聲明組成的。這些聲明可以通過Spring配置文件的形式加入Lucene索引文件目錄,同時可以使用bobo.spring。這些聲明還可以通過建立BoboIndexReader類進行程序構建。這種架構上的選擇可以使得Lucene索引在不被重新進行構建的情況下實現索引的分組瀏覽。

        4.3 在網絡教學中的應用

        針對網絡教學平臺的教育資源研究并定制一個全文檢索系統(tǒng)。系統(tǒng)可以采用分詞優(yōu)化組合的分詞方案,即用匹配度和檢索效率更高的詞典/語法切詞與具備較大靈活性的單字切分相結合的分詞方法,從而達到透徹地分析用戶輸入的查詢請求,以保證檢索結果的質量和靈活性[8]。系統(tǒng)對網絡教學平臺中各種格式的教育資源進行有針對性地文本抽取,如對HTML網頁、PDF文件、Offiee文檔、Text文件、試題庫資源等進行文本抽取,最終轉換成建立索引所需要的固定結構,從而支持網絡教育平臺中各種資源的全文檢索。另外,為了更好的改善索引的更新策略,系統(tǒng)采用了定時器啟動和手工啟動相結合的方案,使得索引的更新變得更加智能化。

        醫(yī)學知識搜索系統(tǒng)屬于專業(yè)型數據的搜索,因此對于一般的全文搜索無法保證搜索結果的準確性,因此需要使用特殊的搜索引擎,那就是垂直搜索引擎[9]。Lucene 是一個支持全文檢索的開源工具包,它提供了查詢引擎、索引引擎以及部分語言的分詞器。將搜索引擎應用到醫(yī)學行業(yè),是一個在 Lucene的基礎上設計的專門針對醫(yī)學行業(yè)的專業(yè)模型,并且結合醫(yī)學領域特有的需求做了個性化的排序處理。在Lucene提供的框架的基礎上,可以方便地進行二次開發(fā),輕易建立完整的桌面或 WEB 全文檢索應用。

        5 總結

        Lucene是兩千年初的產物,距今已經有十多年的歷史了,這些年來,它一直在不斷的更新,其精華不是一朝一夕能研究透的,因此本研究還存在許多遺漏之處。具體表現在:

        (1)本文暫時只能對txt文檔進行搜索時獲得比較好效果,對word之類的文檔,由于會添加許多附加格式,會有一些不必要的標簽,使得創(chuàng)建的索引存在很大的冗余。不過,tika工具已經很好的對各種類型的文檔提取文本內容。

        (2)由于Lucene的增刪改操作都要進行IO操作,因此,若想進行及時搜索,需要對每一個剛剛添加的文檔都進行索引。盡管本研究在最后對性能優(yōu)化提出了一些建議,但是,若在頻繁添加文檔的情況下,必將增大服務器的壓力,降低系統(tǒng)的性能。一個解決方法就是對索引的添加進行集中操作,在一定時間或者在服務器承受壓力較小的某一時間進行添加索引操作。

        4.4 在醫(yī)學知識搜索系統(tǒng)中的應用

        (3)本文研究主要以理論為主,加上一些功能實現代碼,以控制臺的形式展示測試結果,沒有較好的可視化界面,在某些程度上影響了研究與測試效率。

        [1] Otis Gospodnetic,Erik Hatcher. Lucene In Action中文版(譚鴻,黎俊鴻,周鵬,高承山譯)[M],電子工業(yè)出版社,2007.

        [2] 李雪松.中文分詞及其在基于Lucene的全文檢索中的應用[D] .廣東:中山大學,2007.

        [3] 吳眾欣,沈家立.Lucene分析與應用[M].北京:機械工業(yè)出版社,2008.

        [4] 趙汀,孟祥武.基于LUCENE API的中文全文數據庫[D].北京:中國科學技術信息研究所,2002.

        [5] 劉興宇.基于倒排索引的全文檢索技術研究[D].湖北:華中科技大學,2004.

        [6] 王麗云,王華,陳剛.基于Lucene的全文檢索系統(tǒng)的設計與實現[J].計算機工程與設計,2007,24(28):5959-5961.

        [7] 張蕾.基于Lucene的電子檔案檢索系統(tǒng)的設計與實現[D].陜西:西安電子科技大學,2010.

        [8] 陳寧.Lucene全文檢索在網絡教學平臺中的應用研究[D].遼寧:大連海事大學,2007.

        [9] 張平.基于Lucene的醫(yī)學知識搜索系統(tǒng)設計與實現[D].重慶:重慶大學,2008.

        Research and Application of Full-text Retrieval Technology for Document Based on Lucene

        Guo Yongli, Lu Yingying
        (Nanyang Radio and TV University, Nanyang 473000, China)

        This paper analyses the principles and application of Lucene, according to the shortage of IndexSearcher, IndexWriter, Directory, it puts forward some methods to optimize them. and forbids WildcardQuery and FuzzyQuery which is inefficient by override the source code of QueryParser to raise the response speed, at last many applications about Lucene are researched in the paper.

        Search Engine; Full-text Search; Word Segmentation; Index; Optimize

        TP393

        A

        1007-757X(2014)01-0051-04

        2013.12.22)

        郭永利(1978-),男,南陽電視廣播大學,講師,碩士,研究方向:計算機網絡,南陽,473000盧穎穎(1979-),女,南陽電視廣播大學,講師,研究方向:計算機網絡,南陽,473000

        猜你喜歡
        全文檢索分詞文檔
        有人一聲不吭向你扔了個文檔
        結巴分詞在詞云中的應用
        智富時代(2019年6期)2019-07-24 10:33:16
        基于RI碼計算的Word復制文檔鑒別
        值得重視的分詞的特殊用法
        Oracle數據庫全文檢索性能研究
        Persistence of the reproductive toxicity of chlorpiryphos-ethyl in male Wistar rat
        基于KySou的全文檢索系統(tǒng)的分析與優(yōu)化
        特色數據庫全文檢索系統(tǒng)的設計
        高考分詞作狀語考點歸納與疑難解析
        不讓他人隨意下載Google文檔
        電腦迷(2012年4期)2012-04-29 06:12:13
        亚洲av无码乱码国产精品久久| 精品国产亚洲av麻豆尤物| 人妻精品久久久一区二区| 中文字幕乱码亚洲无限码| 一进一出一爽又粗又大| 婷婷五月综合激情| 亚洲一区二区三区av无码| 国产又黄又猛又粗又爽的a片动漫 亚洲精品毛片一区二区三区 | 日本不卡一区二区三区在线| 免费av在线国模| 美女偷拍一区二区三区| 亚洲精品国产av成人精品| 国产揄拍国产精品| 国产一区二区精品在线观看| 日本成人三级视频网站| 亚洲视频免费一区二区| 岳好紧好湿夹太紧了好爽矜持 | 蜜桃久久综合一区二区| 伊人久久精品无码二区麻豆 | 97超碰中文字幕久久| 人妻夜夜爽天天爽三区丁香花| 中文字幕久久精品一二三区| 亚洲区日韩精品中文字幕| 国产亚洲精品一区二区在线播放| 亚洲免费观看视频| 中文字幕av无码免费一区| 免费黄网站久久成人精品| 精品人妻av中文字幕乱| 亚洲国产一二三精品无码| 天堂√最新版中文在线天堂| 人妻精品一区二区免费| 日本熟女人妻一区二区| 人妻丝袜av中文系列先锋影音| 国产91 对白在线播放九色| 久久久噜噜噜噜久久熟女m| 隔壁老王国产在线精品| 国产欧美日韩a片免费软件| 中文字幕乱码中文乱码毛片| 国产熟女一区二区三区不卡| 午夜成人鲁丝片午夜精品| 久久精品性无码一区二区爱爱|