版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
精品文檔-下載后可編輯主題搜索引擎的探究-基礎(chǔ)電子搜索引擎是本上世紀(jì)90年代興起的信息檢索技術(shù),經(jīng)過十多年的發(fā)展,它已經(jīng)滲透到了人們生活的各個(gè)領(lǐng)域。然而,傳統(tǒng)的搜索引擎,也即通用搜索引擎,考慮了所有人的需求,即不管用戶是希望找計(jì)算機(jī)論文方面的信息還是要找籃球運(yùn)動的信息都一致對待,這樣的搜索引擎需要耗費(fèi)巨大的資源而速度較慢。并且,由于通用搜索引擎所面向的領(lǐng)域太廣泛,某些利于用戶提高檢索精度和查全率的技術(shù),比如自動分類,在其中的應(yīng)用效果不理想。
在LuceneAPI的基礎(chǔ)上開發(fā)面向主題的搜索引擎[1]是一種有效、低成本的選擇,因?yàn)長ucene全文數(shù)據(jù)庫采用倒排文件索引技術(shù)[2],所以查詢速度優(yōu)于關(guān)系型數(shù)據(jù)庫,而且可以?;贚ucene的優(yōu)勢已有很多企業(yè)將其應(yīng)用到自己的搜索引擎中,如Eclipse開發(fā)環(huán)境的內(nèi)部搜索引擎就是用Lucene構(gòu)建的。但由于Lucene自帶的中文分詞只能將中文切成單字不能實(shí)現(xiàn)詞語的切分,因此,符合需求的中文分詞器有待人們?nèi)ラ_發(fā),并將其加入中文分詞模塊來實(shí)現(xiàn)更高效的檢索。
1全文檢索引擎Lucene
1.1Lucene簡介
Lucene是apache軟件基金會4jakarta項(xiàng)目組的一個(gè)子項(xiàng)目,是一個(gè)開放源代碼的全文檢索引擎工具包,即它不是一個(gè)完整的全文檢索引擎,而是一個(gè)全文檢索引擎的架構(gòu),提供了完整的查詢引擎和索引引擎,部分文本分析引擎(英文與德文兩種西方語言)。Lucene的目的是為軟件開發(fā)人員提供一個(gè)簡單易用的工具包,以方便的在目標(biāo)系統(tǒng)中實(shí)現(xiàn)全文檢索的功能,或者是以此為基礎(chǔ)建立起完整的全文檢索引擎。
Lucene是一個(gè)高性能、可伸縮的信息搜索(IR)庫。它使你可以為你的應(yīng)用程序添加索引和搜索能力。Lucene是用java實(shí)現(xiàn)的成熟的、的開源項(xiàng)目,是著名的ApacheJakarta大家庭的一員,并且基于在Apache軟件許可[ASF,License].同樣,Lucene是當(dāng)前與近幾年內(nèi)非常流行的的Java信息搜索(IR)庫。
1.2Lucene系統(tǒng)結(jié)構(gòu)
Lucene系統(tǒng)結(jié)構(gòu)[2]如圖1所示。從圖1中可以看到,Lucene的系統(tǒng)由基礎(chǔ)結(jié)構(gòu)封裝、索引、對外接口三大部分組成。其中,直接操作索引文件的索引又是系統(tǒng)的重點(diǎn)。Lucene將所有源碼分為7個(gè)模塊(在Java語言中以包來表示),各個(gè)模塊所表示的系統(tǒng)部分見圖1.需要說明的是:org.apache.lucene.queryPaser是org.apache.lucene.search的語法解析器,不被系統(tǒng)之外實(shí)際調(diào)用,因此沒有當(dāng)作對外接口看待。從面向?qū)ο蟮挠^點(diǎn)來考慮,Lucene應(yīng)用了基本的一條程序設(shè)計(jì)準(zhǔn)則:引入額外的抽象層以降低耦合性。首先,引入對索引文件的操作org.apache.lucene.store的封裝,然后將索引部分的實(shí)現(xiàn)建立在org.apache.lucene.index之上,完成對索引的抽象。在索引的基礎(chǔ)上開始設(shè)計(jì)對外的接口org.apache.lucene.search及org.apache.lucene.analysis.
Lucene秉承了開放源代碼一貫的架構(gòu)優(yōu)良的優(yōu)勢,設(shè)計(jì)了一個(gè)合理而極具擴(kuò)充能力的面向?qū)ο蠹軜?gòu),程序員可以在Lucene的基礎(chǔ)上擴(kuò)充各種功能,比如擴(kuò)充中文處理能力,從文本擴(kuò)充到HTML、PDF等等文本格式的處理,編寫這些擴(kuò)展的功能不僅僅不復(fù)雜,而且由于Lucene恰當(dāng)合理的對系統(tǒng)設(shè)備做了程序上的抽象,擴(kuò)展的功能也能輕易的達(dá)到跨平臺的能力。
1.3Lucene程序運(yùn)行機(jī)制
Lucene系統(tǒng)功能強(qiáng)大,實(shí)現(xiàn)復(fù)雜,但從根本上主要包括2個(gè)主要功能:(1)建立索引庫[4],也就是將待索引的純文本內(nèi)容經(jīng)切分詞后索引入庫;(2)檢索索引庫,即根據(jù)查詢條件從索引庫中找出符合條件的文檔。
在研究建立索引庫時(shí)首先要知道如圖2所示的Lucene索引機(jī)制的架構(gòu)。
從圖2可以看出,Lucene索引過程分為3個(gè)主要操作階段:將數(shù)據(jù)轉(zhuǎn)換成文本;分析文本;將分析過的文本保存到索引庫中。首先,Lucene使用各種解析器對各種不同類型的文檔進(jìn)行解析,如對于HTML文檔,HTML解析器會做一些預(yù)處理的工作,過濾文檔中的HTML標(biāo)簽等,然后輸出文本內(nèi)容,接著Lucene的分詞器從文本內(nèi)容中提取出索引項(xiàng)以及相關(guān)信息。
檢索索引庫的運(yùn)行邏輯如下:
(1)輸入查詢條件,如用戶希望查詢到含有詞"編程"和"入門"但不含詞"Java"的記錄,則輸入條件為"編程+入門-Java";查詢條件輸入搜索器(lucene.search),搜索器里有1個(gè)查詢解析器(lucene.queryParser),搜索器調(diào)用這個(gè)查詢解析器來解析查詢條件。
(2)查詢條件"編程+入門-Java"被傳送到查詢解析器中,解析器將對"編程+入門-Java"進(jìn)行分析,首先分析器解析字符串的連接符,即加號和減號,然后調(diào)用語言解析器(lucene.analysis)對每個(gè)詞進(jìn)行切詞,一般英文將按空格來切詞,得到的查詢條件表示為:"編程"AND"入門"ANDNOT"Java".
(3)查詢器根據(jù)查詢條件檢索事先已建立好的索引庫,得到查詢結(jié)果,并返回結(jié)果集lucene.search.Hits,Hits類似于JDBC中的ResultSet.
2中文分詞
因?yàn)長ucene提供的兩個(gè)中文分析器(ChineseAnalyzer和CJKAnalyzer)只能將中文切成單漢字,這對于絕大多數(shù)中文用戶來說很不方便,因此有必要開發(fā)適合自己的中文分析器。本系統(tǒng)基于字符串匹配的分詞技術(shù)實(shí)現(xiàn)了一個(gè)中文分詞器。它是按照一定的策略將待分析的漢字串與1個(gè)"充分大的"詞庫中的詞條進(jìn)行匹配。若在詞庫中找到某個(gè)字符串則匹配成功(識別出1個(gè)詞)。按照掃描方向的不同,串匹配分詞方法[5]可以分為正向匹配和逆向匹配;按照不同長度優(yōu)先匹配的情況,可以分為(長)匹配和(短)匹配。本研究使用的方式是采用基于字典的雙向匹配算法,即需要進(jìn)行正向和逆向2次匹配。傳統(tǒng)的方法都是先進(jìn)行1次正向匹配,然后再進(jìn)行逆向匹配,每次只有1個(gè)方向在進(jìn)行匹配,而另1個(gè)方向的匹配過程需要第1個(gè)結(jié)束后才開始。本文的設(shè)計(jì)方法是把多線程技術(shù)引入到中文分詞程序當(dāng)中[6].因此可以在正向匹配時(shí),同時(shí)并發(fā)地執(zhí)行逆向匹配,提高了運(yùn)行速度和執(zhí)行效率。以下為正向匹配和逆向匹配都將調(diào)用的程序:
載入處理完的文本,以字符數(shù)組的形式存儲起來。建立2個(gè)方法:(1)查找在文本中出現(xiàn)的詞,并且返回詞的長度;(2)用來統(tǒng)計(jì)詞出現(xiàn)的次數(shù)和控制程序進(jìn)度。
方法1:publicintzhaoCi(char[]ch,intjuli,TreeMap[]tmp)。
ch數(shù)組表示的是文本內(nèi)容,juli是詞的長度,TreeMap數(shù)組存儲不同長度的詞。
方法2:publicsynchronizedvoidciPinTongJi(HashMaphm,char[]ch,intsize,TreeMap[]tmp)。
方法2是并發(fā)執(zhí)行的,正反匹配都需要這個(gè)方法。HashMap存儲字典中詞的第1個(gè)字,ch數(shù)組表示的是文本內(nèi)容,size是文件的長度,TreeMap是數(shù)組存儲不同長度的詞,按照2個(gè)字、3個(gè)字、多個(gè)字的存儲順序存儲;而且方法2是對外的接口,方法2調(diào)用方法1,并利用方法1返回的結(jié)果得到分詞的結(jié)果和詞頻結(jié)果。當(dāng)從文本讀入1個(gè)字時(shí),使用contain()來判斷HashMap中是否存在這個(gè)字的映射,如果存在就取得長度等于字典中長詞的一段內(nèi)容,在TreeMap數(shù)組中進(jìn)行查找,如果在TreeMap中找到對應(yīng)的映射則對應(yīng)的鍵值加1,輸出時(shí)在詞后面加上分割符號'\',然后繼續(xù)重復(fù)前面的步驟,直到文件結(jié)束,退出;如果TreeMap中不存在,那么i+1,讀取下一個(gè)字,重復(fù)前面的步驟,直到文件的結(jié)尾,退出,程序結(jié)束。
正向匹配程序流程圖如圖3所示。
3全文檢索引擎Lucene的應(yīng)用
Lucene本身只是一個(gè)組件,若想讓Lucene真正起作用,還得在Lucene基礎(chǔ)上進(jìn)行必要的2次開發(fā)[7].下面的方案是對Lucene的應(yīng)用研究,在本系統(tǒng)實(shí)現(xiàn)過程中要解決的關(guān)鍵問題有:數(shù)據(jù)加工及文本數(shù)據(jù)庫的實(shí)現(xiàn);全文數(shù)據(jù)索引;全文數(shù)據(jù)檢索和結(jié)果處理。
3.1運(yùn)行環(huán)境
操作系統(tǒng):WindowsNT/2000/xp;開發(fā)語言:Java、JSP;開發(fā)環(huán)境:MyEclipse6.5;API插件:Lucene2.3.2(JakartaLucene是一套的開放源代碼,由ApacheJakarta開發(fā));Web服務(wù)器:Apache的Tomcat6.0.
Lucene在Java環(huán)境下運(yùn)行,因此首先要安裝jdk并設(shè)置環(huán)境變量JAVA_HOME,還要安裝tomcat6.0.到Lucene的網(wǎng)站1份拷貝(筆者的是版2.3.2),后將得到一個(gè)名為lucene-2.3.2.zip和apache-ant-1.7.0-bin.zip的壓縮文件,將其解壓即可。
3.2系統(tǒng)結(jié)構(gòu)
該應(yīng)用分為3部分:(1)數(shù)據(jù)庫發(fā)布平臺,包括服務(wù)器、Java環(huán)境、LuceneAPI、中文分詞模塊;(2)HTML文件倒排檔生成系統(tǒng);(3)服務(wù)器端執(zhí)行的JSP程序和用戶界面。系統(tǒng)結(jié)構(gòu)如圖4所示。
3.3Lucene的擴(kuò)展
對于Lucene組件包,為了能夠支持中文,要進(jìn)行修改。首先將改寫后支持中文的分析包IKAnalyzer.jar加入到發(fā)布包Analysis包中。解開Lucene.zip,在解開的目錄src\demo\org\apache\Lucene\demo下打開IndexHTML.java.在第1處"importorg.apache.lucene.analysis.standard.StandardAnalyzer;"下面加1行"importorg.apache.lucene.analysis.IKAnalyzer;",把第2處"writer=newIndexWriter(index,newStandardAnalyzer(),create);"解釋掉,換成"writer=newIndexWriter(index,newChineseAnalyzer(),create);"解開Luceneweb.War,釋放出configuration.jsp和result.jsp以及web.xml.編輯configuration.Jsp,找到indexLocation變量,賦值成"/index"(或者用戶自己建立的索引的目錄名稱);編輯result.Jsp,找到"Analyzeranalyzer=newStopAnalyzer();"刪除或者解釋掉,改成"Analyzeranalyzer=neworg.apache.lucene.analysis.IKAnalyzer();".這樣就擴(kuò)展了Lucene的中文分詞的功能。
Lucene并沒有規(guī)定數(shù)據(jù)源的格式,而只提供了1個(gè)通用的結(jié)構(gòu)(Document對象)來接收索引的輸入,因此輸入的數(shù)據(jù)源可以是:數(shù)據(jù)庫、WORD文檔、PDF文檔、HTML文檔……,只要能夠設(shè)計(jì)相應(yīng)的解析轉(zhuǎn)換器將數(shù)據(jù)源構(gòu)造成Docuement對象即可進(jìn)行索引。本設(shè)計(jì)實(shí)現(xiàn)了doc、ppt、xls、pdf、txt、xml解析轉(zhuǎn)換器將其文本信息提取出來。
3.4搜索性能的比較
經(jīng)過多次測試取平均值,本設(shè)計(jì)在搜索主題信息的平均速度上比Google要快,雖然數(shù)量上不如Google檢索的多,但在信息符合度上明顯比其強(qiáng)。這樣就已經(jīng)符合主題用戶,不一定要多只要精而且節(jié)省時(shí)間的需求,這對于當(dāng)今效率優(yōu)先的市場來說是非常有競爭力的。應(yīng)用Lucene的搜索引擎的檢索速度與計(jì)算機(jī)的配置有關(guān),配置較好的計(jì)算機(jī)的搜索時(shí)間相對要少。以檢索關(guān)鍵字編程為例,Lucene與Google性能比較結(jié)果如表1所示。
全文檢索引擎Lucene所構(gòu)建的搜索引擎的搜索個(gè)數(shù)是由磁盤存儲的信息量的多少決定的,搜索時(shí)間除了第1次檢索有點(diǎn)慢,以后的時(shí)間耗費(fèi)明顯少于通用搜索引擎。雖然通用搜索引擎提供的信息量大,但是并不是所有的信息都符合用戶的需求,用戶要在大量的信息中篩選有用的信息要花費(fèi)大量的時(shí)間,可見主題搜索引擎的優(yōu)勢,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025江蘇省安全員《A證》考試題庫
- 靈芝種植產(chǎn)業(yè)基地項(xiàng)目可行性研究報(bào)告-靈芝市場需求持續(xù)擴(kuò)大
- 廣州中醫(yī)藥大學(xué)《試劑生產(chǎn)工藝》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025青海省建筑安全員-B證考試題庫及答案
- 廣州醫(yī)科大學(xué)《哲學(xué)通論》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025遼寧建筑安全員考試題庫
- 2025年江蘇建筑安全員考試題庫及答案
- 2025年-江蘇省安全員《B證》考試題庫及答案
- 《FOOD中國飲食文化》課件
- 【語文課件】冀中的地道戰(zhàn)課件
- 你比我猜成語
- 異質(zhì)結(jié)完整分
- 膿毒癥1小時(shí)bundle質(zhì)量控制
- 第7講 高斯光束的聚焦和準(zhǔn)直課件
- 骨科患者術(shù)后疼痛管理的新進(jìn)展
- 小學(xué)生三好學(xué)生競選演講稿PPT幻燈片
- 01S201室外消火栓安裝圖集
- 蒸餾酒及配制酒衛(wèi)生檢驗(yàn)原始記錄
- 高一英語外研版必修一(2019)Unit 1 Period 8 Writing-Writing a journal entry(學(xué)案)
- 鉆井HSE作業(yè)風(fēng)險(xiǎn)控制
- S7-200SMARTPLC應(yīng)用技術(shù)PPT完整全套教學(xué)課件
評論
0/150
提交評論