基于Lucene的校園搜索系統(tǒng)開發(fā)論文_第1頁
基于Lucene的校園搜索系統(tǒng)開發(fā)論文_第2頁
基于Lucene的校園搜索系統(tǒng)開發(fā)論文_第3頁
基于Lucene的校園搜索系統(tǒng)開發(fā)論文_第4頁
基于Lucene的校園搜索系統(tǒng)開發(fā)論文_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、摘 要校園網(wǎng)已經(jīng)成為高校信息資源共享和管理的重要平臺(tái),網(wǎng)絡(luò)構(gòu)建目的不同使得校園網(wǎng)與互聯(lián)網(wǎng)之間存在著較大差異,這些差異導(dǎo)致校園網(wǎng)搜索引擎的實(shí)現(xiàn)需要引進(jìn)新的技術(shù)和方法。本文通過分析比較校園網(wǎng)和公用互聯(lián)網(wǎng)的區(qū)別,統(tǒng)計(jì)分析并總結(jié)出校園網(wǎng)信息資源的特點(diǎn),并基于這些特點(diǎn)提出了多維度量排序算法等技術(shù),以提高搜索引擎查詢準(zhǔn)確度,實(shí)際構(gòu)建的校園網(wǎng)搜索系統(tǒng)表現(xiàn)出比傳統(tǒng)搜索引擎更優(yōu)的搜索性能。在此基礎(chǔ)上,本文利用基于Java的全文檢索工具包Lucene開發(fā)定制了一個(gè)基于Lucene的校園網(wǎng)搜索系統(tǒng)。關(guān)鍵詞:搜索引擎;Lucene;排序算法;相關(guān)度AbstractCampus Network is an import

2、ant platform of university information resources, which differs from Internet in many aspects. New methods and algorithms is used to build a good university information resources search engine.Based on the analyses of the differences between campus network and Internet,corresponding solutions such a

3、s multiple metrics ranking algorithm is proposed. A real university information resources search system is conducted and the experimental results show that search system has many advantages compared with the general Internet search engine. This article describes how to develop a search system of cam

4、pus network for our need quickly based on Lucene which is a power full - text retrieval tools. Keywords: search Engine; Lucene; ranking algorithm; Relevance目錄摘 要iAbstractii目錄iii第1章緒論11.1搜索引擎的概念11.2校園網(wǎng)搜索的特點(diǎn)21.3論文研究內(nèi)容及其意義4第2章Lucene研究62.1Lucene簡介62.2Lucene的應(yīng)用、特點(diǎn)及優(yōu)勢(shì)62.3Lucene系統(tǒng)結(jié)構(gòu)分析72.4Lucene數(shù)據(jù)流分析9第3章校園網(wǎng)

5、搜索系統(tǒng)設(shè)計(jì)113.1體系結(jié)構(gòu)設(shè)計(jì)113.2整體設(shè)計(jì)流程圖123.3引擎設(shè)計(jì)主要類圖133.3.1語言分析類133.3.2文檔結(jié)構(gòu)類143.3.3索引管理類143.3.4查詢分析和檢索類173.3.5工具類183.4索引文件存儲(chǔ)抽象18第4章校園網(wǎng)搜索系統(tǒng)實(shí)現(xiàn)224.1系統(tǒng)主要模塊的具體實(shí)現(xiàn)224.1.1系統(tǒng)維護(hù)接口224.1.2索引器224.1.3查詢分析器234.1.4索器244.2關(guān)鍵技術(shù)研究254.2.1中文分詞254.2.2解析網(wǎng)頁及索引入庫254.2.3網(wǎng)頁排序算法及檢索輸出264.2.4PDF等異構(gòu)文本處理30總結(jié)與展望32參考文獻(xiàn)33致 謝34第1章 緒論1.1 搜索引擎的概念

6、搜索引擎(Search Engine)指的是一種在Web上應(yīng)用的軟件系統(tǒng),它以一定的策略在Web上搜集和發(fā)現(xiàn)信息,在對(duì)信息進(jìn)行處理和組織后,為用戶提供Web信息查詢服務(wù)。從使用者的角度看,這種軟件系統(tǒng)提供一個(gè)網(wǎng)頁界面,讓他通過瀏覽器提交一個(gè)詞語或者短語,然后很快返回一個(gè)可能和用戶輸入內(nèi)容相關(guān)的信息列表(常常會(huì)是很長一個(gè)列表,例如包含1萬個(gè)條目)。這個(gè)列表中的每一條目代表一篇網(wǎng)頁,至少有3個(gè)元素:標(biāo)題:以某種方式得到的網(wǎng)頁內(nèi)容的標(biāo)題。最簡單的方式就是從網(wǎng)頁的標(biāo)簽中提取的內(nèi)容。(盡管在一些情況下并不真正反映網(wǎng)頁的內(nèi)容)。URL:該網(wǎng)頁對(duì)應(yīng)的“訪問地址”。有經(jīng)驗(yàn)的Web用戶常??梢酝ㄟ^這個(gè)元素對(duì)網(wǎng)頁

7、內(nèi)容的權(quán)威性進(jìn)行判斷,例如上面的內(nèi)容通常就比(某個(gè)假想的個(gè)人網(wǎng)站)上的要更權(quán)威些(不排除后者上的內(nèi)容更有趣些)。摘要:以某種方式得到的網(wǎng)頁內(nèi)容的摘要。最簡單的一種方式就是將網(wǎng)頁內(nèi)容的頭若干字節(jié)(例如512)截取下來作為摘要。通過瀏覽這些元素,用戶對(duì)相應(yīng)的網(wǎng)頁是否真正包含他所需的信息進(jìn)行判斷。比較肯定的話則可以點(diǎn)擊上述URL,從而得到該網(wǎng)頁的全文。隨著Internet的迅速發(fā)展,網(wǎng)上的信息越來越多。如何從浩如煙海的信息中獲得自己感興趣的部分,就成為一個(gè)重要的問題。作為幫助人們解決這一問題的主要工具,搜索引擎從1995年開始逐漸發(fā)展起來。與傳統(tǒng)的信息檢索系統(tǒng)相比,搜索引擎的設(shè)計(jì)顯然要困難許多。這是

8、有Web信息的特點(diǎn)決定的:(1) 內(nèi)容廣泛:Internet是一個(gè)遍布全球的綜合信息網(wǎng)。Web頁面內(nèi)容涵蓋各行各業(yè)、各種學(xué)科;并使用各種語言創(chuàng)建,因此搜索引擎是一個(gè)跨語言信息檢索系統(tǒng)。(2) 動(dòng)態(tài)性:傳統(tǒng)信息檢索中的文獻(xiàn)集合一般是不變的或者變化很小,而Internet的信息確是隨時(shí)變化的,信息的組織幾乎是無序的。(3) 用戶廣泛:全球數(shù)以億計(jì)的Internet用戶都是搜索引擎的用戶。他們不同于傳統(tǒng)信息檢索系統(tǒng)的用戶,后者往往是比較專業(yè)甚至受過專門培訓(xùn)的職業(yè)人員。(4) 相互鏈接:分布在全球各地?cái)?shù)以十億計(jì)的網(wǎng)頁通過超級(jí)鏈接連接起來,共同組成這個(gè)世界上最大的信息資源庫。(5) 最后,和傳統(tǒng)信息檢索

9、不同的是,文檔的內(nèi)容由超文本標(biāo)記語言(HTML)表示而非自然語言。其中前兩點(diǎn)增加了“文檔內(nèi)容表示”過程的難度;第三點(diǎn),是我們的人機(jī)交互接口設(shè)計(jì)和“用戶需求表示”過程更加困難。而最后兩個(gè)特點(diǎn)為我們提高檢索系統(tǒng)的性能,提供了更多的信息。搜索引擎的組成和傳統(tǒng)信息檢索系統(tǒng)并沒有太大的不同。唯一必須說明的是其網(wǎng)頁的獲取通過一個(gè)稱為網(wǎng)絡(luò)爬蟲(WebCrawler)的程序完成。網(wǎng)絡(luò)爬蟲不間斷的爬行于網(wǎng)際之中,去搜集新出現(xiàn)的或者剛更新的網(wǎng)頁。當(dāng)它訪問一個(gè)網(wǎng)站時(shí),記錄該站點(diǎn)內(nèi)各級(jí)頁面的全部文本信息,并根據(jù)網(wǎng)頁上提供的鏈接信息進(jìn)行遞歸檢索,由此竭力窮盡所有網(wǎng)頁。1.2 校園網(wǎng)搜索的特點(diǎn)校園網(wǎng)可以看作以學(xué)校為單位的

10、內(nèi)聯(lián)網(wǎng),它與互聯(lián)網(wǎng)是同質(zhì)的,但是由于應(yīng)用環(huán)境、網(wǎng)站構(gòu)建以及鏈接結(jié)構(gòu)方面的不同,對(duì)搜索引擎來說,校園網(wǎng)與公用互聯(lián)網(wǎng)有著多方面的區(qū)別。從總體上來說,校園網(wǎng)的主要目的是用于信息發(fā)布,例如教學(xué)資源、辦公信息、校內(nèi)新聞等,相對(duì)互聯(lián)網(wǎng)較強(qiáng)的商業(yè)性有相當(dāng)?shù)牟町?。如果直接將傳統(tǒng)的互聯(lián)網(wǎng)搜索算法應(yīng)用到校園網(wǎng)當(dāng)中,難以得到令用戶滿意的搜索性能。1. 網(wǎng)站分布校園網(wǎng)網(wǎng)站一般集中在一個(gè)或幾個(gè)IP地址段內(nèi),網(wǎng)站的數(shù)量和IP地址變動(dòng)相對(duì)頻繁;網(wǎng)站之間的鏈接稀疏,由于分別由不同機(jī)構(gòu)和個(gè)人進(jìn)行維護(hù),有些網(wǎng)站很難從其它網(wǎng)站的鏈接達(dá)到;網(wǎng)站的重要性與網(wǎng)站規(guī)模不成正比,例如新聞和論壇類網(wǎng)站的網(wǎng)頁數(shù)量多并且鏈接較密,而教學(xué)和管理部門

11、的網(wǎng)站則相反。2. 校園網(wǎng)沒有廣告和垃圾網(wǎng)頁,網(wǎng)頁間鏈接稀疏大部分網(wǎng)站由各院系的網(wǎng)站管理人員進(jìn)行維護(hù),網(wǎng)頁的發(fā)布需要經(jīng)過較嚴(yán)格的審核,發(fā)布的榮具有權(quán)威性和真實(shí)性,區(qū)別于互聯(lián)網(wǎng)的商業(yè)行為。據(jù)天網(wǎng)搜索對(duì)國內(nèi)互聯(lián)網(wǎng)進(jìn)行的統(tǒng)計(jì),每個(gè)網(wǎng)頁的平均出度為25.7。而對(duì)清華大學(xué),北京郵電大學(xué)校園網(wǎng)的統(tǒng)計(jì)則顯示,網(wǎng)頁的平均出度分別為13.3、8.0。這是因?yàn)樾@網(wǎng)網(wǎng)站往往不使用交換鏈接等方式以獲得商業(yè)利益,造成網(wǎng)頁之間的鏈接較少。3. Word、PDF等異構(gòu)文本格式的網(wǎng)頁比例高互聯(lián)網(wǎng)上常見的網(wǎng)頁通常有靜態(tài)網(wǎng)頁(文件后綴為htm、html、shtml等)、動(dòng)態(tài)網(wǎng)頁(文件后綴為asp、jsp、php等)以及各種文檔

12、(文件后綴為doc、pdf、ppt等)。我們把doc、pdf、ppt等類型的文件稱為異構(gòu)體文本。校園網(wǎng)中通常包括圖書館、論文等各種學(xué)術(shù)資源,這些信息通常都是以異構(gòu)體文本的形式發(fā)布的,這是校園網(wǎng)資源的一個(gè)顯著特點(diǎn)。Error! Reference source not found.顯示了我們通過實(shí)際采集和統(tǒng)計(jì)(不包括圖像、語音等多媒體文件)得到的網(wǎng)頁類型分布。圖中靠左的直方柱是對(duì)國內(nèi)互聯(lián)網(wǎng)(包括公用網(wǎng)ChinaNet、教育網(wǎng)CERNET)中較有影響的10000個(gè)網(wǎng)站進(jìn)行網(wǎng)頁采集,共采集網(wǎng)頁個(gè)。其中異構(gòu)體文本文件個(gè),占總數(shù)的1.31%。圖中的靠右的直方柱是對(duì)教育網(wǎng)(CERNET)內(nèi)較有影響的300

13、0個(gè)網(wǎng)站進(jìn)行采集,共采集網(wǎng)頁個(gè)。其中異構(gòu)體文本文件個(gè),占總數(shù)的3.46%。教育網(wǎng)中異構(gòu)體文本占總網(wǎng)頁數(shù)的比例比互聯(lián)網(wǎng)平均水平要高出160%。圖 11 教育網(wǎng)和互聯(lián)網(wǎng)的網(wǎng)頁類型分布4. 用戶查詢習(xí)慣互聯(lián)網(wǎng)上的查詢往往沒有特別明確的預(yù)期,對(duì)同一個(gè)查詢?cè)~,有幾十或成百上千個(gè)相關(guān)的返回結(jié)果。搜索引擎可以通過鏈接分析等技術(shù)把“權(quán)威”的網(wǎng)頁排在靠前位置,得到令用戶滿意的查詢結(jié)果。校園網(wǎng)用戶通常具有明確的查詢預(yù)期,例如某個(gè)專業(yè)的招生計(jì)劃、某個(gè)教授的個(gè)人資料等。正確的搜索結(jié)果通常沒有明顯的特點(diǎn),通常不是被眾多鏈接指向的“權(quán)威”網(wǎng)頁。因此在排序算法中需要更多考慮相關(guān)度的分析和比較。1.3 論文研究內(nèi)容及其意義本

14、文首先介紹了搜索引擎的基本概念,分析了校園網(wǎng)與公用互聯(lián)網(wǎng)的不同之處,意在建立一個(gè)基于Lucene的校園網(wǎng)搜索引擎。第二章介紹了Lucene及其系統(tǒng)結(jié)構(gòu)及數(shù)據(jù)流;第三章著重介紹搜索引擎的設(shè)計(jì);第四章則詳細(xì)介紹了搜索引擎的實(shí)現(xiàn),并對(duì)對(duì)分詞,網(wǎng)頁解析及網(wǎng)頁排序算法進(jìn)行了重點(diǎn)研究。本系統(tǒng)的開發(fā)完成對(duì)于師生查詢校園辦公網(wǎng)、各分院網(wǎng)站、校園網(wǎng)內(nèi)其它資源的查詢有很大的意義,用戶不必為了查詢某特定信息而進(jìn)入特定網(wǎng)站的搜索引擎查詢,只需要在辦公網(wǎng)的全文搜索引擎中搜索即可,查詢得到的信息也將是最新最全的。另一方面,本搜索引擎將可以很方便地應(yīng)用于企業(yè)內(nèi)網(wǎng)、門戶網(wǎng)站中。目前許多網(wǎng)站通常通過調(diào)用諸如Google或百度的

15、搜索服務(wù),來實(shí)現(xiàn)對(duì)本站點(diǎn)的搜索。但是對(duì)于一個(gè)有很多子網(wǎng)站的企業(yè)門戶網(wǎng)站來說,通用搜索引擎存在著很多缺陷,滿足不了這種搜索服務(wù)要求,如:盡管Google等搜索引擎提供對(duì)指定站點(diǎn)內(nèi)的查詢,但是不能同時(shí)對(duì)多個(gè)站點(diǎn)同時(shí)查詢;通用搜索引擎不能及時(shí)更新索引,會(huì)導(dǎo)致搜索結(jié)果不全和出現(xiàn)“壞鏈接”;使用通用搜索引擎同時(shí)存在著安全隱患。因此開發(fā)一個(gè)由企業(yè)自主定制的搜索引擎,顯得非常重要,而本項(xiàng)目的開發(fā)將同時(shí)解決這個(gè)問題。第2章 Lucene研究2.1 Lucene簡介Lucene是apache軟件基金會(huì)jakarta項(xiàng)目組的一個(gè)子項(xiàng)目,是一個(gè)開放源代碼5的全文檢索引擎工具包,即它不是一個(gè)完整的全文檢索引擎,而是一

16、個(gè)全文檢索引擎的架構(gòu),提供了完整的查詢引擎和索引引擎,部分文本分析引擎(英文與德文兩種西方語言)。Lucene的目的是為軟件開發(fā)人員提供一個(gè)簡單易用的工具包,以方便的在目標(biāo)系統(tǒng)中實(shí)現(xiàn)全文檢索的功能,或者是以此為基礎(chǔ)建立起完整的全文檢索引擎。2.2 Lucene的應(yīng)用、特點(diǎn)及優(yōu)勢(shì)作為一個(gè)開放源代碼項(xiàng)目,Lucene從問世之后,引發(fā)了開放源代碼社群的巨大反響,程序員們不僅使用它構(gòu)建具體的全文檢索應(yīng)用,而且將之集成到各種系統(tǒng)軟件中去,以及構(gòu)建Web應(yīng)用,甚至某些商業(yè)軟件也采用了Lucene作為其內(nèi)部全文檢索子系統(tǒng)的核心。apache軟件基金會(huì)的網(wǎng)站使用了Lucene作為全文檢索的引擎,IBM的開源軟

17、件eclipse的2.1版本中也采用了Lucene作為幫助子系統(tǒng)的全文索引引擎,相應(yīng)的IBM的商業(yè)軟件Web Sphere中也采用了Lucene。Lucene以其開放源代碼的特性、優(yōu)異的索引結(jié)構(gòu)、良好的系統(tǒng)架構(gòu)獲得了越來越多的應(yīng)用。Lucene作為一個(gè)全文檢索引擎,其具有如下突出的優(yōu)點(diǎn):(1) 索引文件格式獨(dú)立于應(yīng)用平臺(tái)。Lucene定義了一套以8位字節(jié)為基礎(chǔ)的索引文件格式,使得兼容系統(tǒng)或者不同平臺(tái)的應(yīng)用能夠共享建立的索引文件。(2) 在傳統(tǒng)全文檢索引擎的倒排索引的基礎(chǔ)上,實(shí)現(xiàn)了分塊索引,能夠針對(duì)新的文件建立小文件索引,提升索引速度。然后通過與原有索引的合并,達(dá)到優(yōu)化的目的。(3) 優(yōu)秀的面向

18、對(duì)象的系統(tǒng)架構(gòu),使得對(duì)于Lucene擴(kuò)展的學(xué)習(xí)難度降低,方便擴(kuò)充新功能。(4) 設(shè)計(jì)了獨(dú)立于語言和文件格式的文本分析接口,索引器通過接受Token流完成索引文件的創(chuàng)立,用戶擴(kuò)展新的語言和文件格式,只需要實(shí)現(xiàn)文本分析的接口。(5) 已經(jīng)默認(rèn)實(shí)現(xiàn)了一套強(qiáng)大的查詢引擎,用戶無需自己編寫代碼即使系統(tǒng)可獲得強(qiáng)大的查詢能力,Lucene的查詢實(shí)現(xiàn)中默認(rèn)實(shí)現(xiàn)了布爾操作、模糊查詢(Fuzzy Search)、分組查詢等等。面對(duì)已經(jīng)存在的商業(yè)全文檢索引擎,Lucene也具有相當(dāng)?shù)膬?yōu)勢(shì)。首先,它的開發(fā)源代碼發(fā)行方式(遵守Apache Software License),在此基礎(chǔ)上程序員不僅僅可以充分的利用Luce

19、ne所提供的強(qiáng)大功能,而且可以深入細(xì)致的學(xué)習(xí)到全文檢索引擎制作技術(shù)和面相對(duì)象編程的實(shí)踐,進(jìn)而在此基礎(chǔ)上根據(jù)應(yīng)用的實(shí)際情況編寫出更好的更適合當(dāng)前應(yīng)用的全文檢索引擎。在這一點(diǎn)上,商業(yè)軟件的靈活性遠(yuǎn)遠(yuǎn)不及Lucene。其次,Lucene秉承了開放源代碼一貫的架構(gòu)優(yōu)良的優(yōu)勢(shì),設(shè)計(jì)了一個(gè)合理而極具擴(kuò)充能力的面向?qū)ο蠹軜?gòu),程序員可以在Lucene的基礎(chǔ)上擴(kuò)充各種功能,比如擴(kuò)充中文處理能力,從文本擴(kuò)充到HTML、PDF等等文本格式的處理,編寫這些擴(kuò)展的功能不僅僅不復(fù)雜,而且由于Lucene恰當(dāng)合理的對(duì)系統(tǒng)設(shè)備做了程序上的抽象,擴(kuò)展的功能也能輕易的達(dá)到跨平臺(tái)的能力。最后,轉(zhuǎn)移到apache軟件基金會(huì)后,借助于

20、apache軟件基金會(huì)的網(wǎng)絡(luò)平臺(tái),程序員可以方便的和開發(fā)者、其它程序員交流,促成資源的共享,甚至直接獲得已經(jīng)編寫完備的擴(kuò)充功能。最后,雖然Lucene使用Java語言寫成,但是開放源代碼社區(qū)的程序員正在不懈的將之使用各種傳統(tǒng)語言實(shí)現(xiàn)(例如.net framework),在遵守Lucene索引文件格式的基礎(chǔ)上,使得Lucene能夠運(yùn)行在各種各樣的平臺(tái)上,系統(tǒng)管理員可以根據(jù)當(dāng)前的平臺(tái)適合的語言來合理的選擇。2.3 Lucene系統(tǒng)結(jié)構(gòu)分析Lucene作為一個(gè)優(yōu)秀的全文檢索引擎,其系統(tǒng)結(jié)構(gòu)具有強(qiáng)烈的面向?qū)ο筇卣?。首先是定義了一個(gè)與平臺(tái)無關(guān)的索引文件格式,其次通過抽象將系統(tǒng)的核心組成部分設(shè)計(jì)為抽象類,

21、具體的平臺(tái)實(shí)現(xiàn)部分設(shè)計(jì)為抽象類的實(shí)現(xiàn),此外與具體平臺(tái)相關(guān)的部分比如文件存儲(chǔ)也封裝為類,經(jīng)過層層的面向?qū)ο笫降奶幚?,最終達(dá)成了一個(gè)低耦合高效率,容易二次開發(fā)的檢索引擎系統(tǒng)。Error! Reference source not found.即為Lucene的系統(tǒng)結(jié)構(gòu)圖。圖 21 Lucene系統(tǒng)結(jié)構(gòu)圖從圖中可以清楚的看到,Lucene的系統(tǒng)由基礎(chǔ)結(jié)構(gòu)封裝、索引核心、對(duì)外接口三大部分組成。其中直接操作索引文件的索引核心又是系統(tǒng)的重點(diǎn)。Lucene的將所有源碼分為了7個(gè)模塊(在java語言中以包即package來表示),各個(gè)模塊所屬的系統(tǒng)部分也如上圖所示。需要說明的是org.apache.lucen

22、e.queryPaser是做為org.apache.lucene.search的語法解析器存在,不被系統(tǒng)之外實(shí)際調(diào)用,因此這里沒有當(dāng)作對(duì)外接口看待,而是將之獨(dú)立出來。從面向?qū)ο蟮挠^點(diǎn)來考察,Lucene應(yīng)用了最基本的一條程序設(shè)計(jì)準(zhǔn)則:引入額外的抽象層以降低耦合性。首先,引入對(duì)索引文件的操作org.apache.lucene.store的封裝,然后將索引部分的實(shí)現(xiàn)建立在(org.apache.lucene.index)其之上,完成對(duì)索引核心的抽象。在索引核心的基礎(chǔ)上開始設(shè)計(jì)對(duì)外的接口org.apache.lucene.search與org.apache.lucene.analysis。在每一個(gè)局

23、部細(xì)節(jié)上,比如某些常用的數(shù)據(jù)結(jié)構(gòu)與算法上,Lucene也充分的應(yīng)用了這一條準(zhǔn)則。在高度的面向?qū)ο罄碚摰闹蜗拢沟肔ucene的實(shí)現(xiàn)容易理解,易于擴(kuò)展。Lucene在系統(tǒng)結(jié)構(gòu)上的另一個(gè)特點(diǎn)表現(xiàn)為其引入了傳統(tǒng)的客戶端服務(wù)器結(jié)構(gòu)以外的應(yīng)用結(jié)構(gòu)。Lucene可以作為一個(gè)運(yùn)行庫被包含進(jìn)入應(yīng)用本身中去,而不是做為一個(gè)單獨(dú)的索引服務(wù)器存在。這自然和Lucene開放源代碼的特征分不開,但是也體現(xiàn)了Lucene在編寫上的本來意圖:提供一個(gè)全文索引引擎的架構(gòu),而不是實(shí)現(xiàn)。2.4 Lucene數(shù)據(jù)流分析理解Lucene系統(tǒng)結(jié)構(gòu)的另一個(gè)方式是去探討其中數(shù)據(jù)流的走向,并以此摸清楚Lucene系統(tǒng)內(nèi)部的調(diào)用時(shí)序。在此基

24、礎(chǔ)上,才能夠更加深入的理解Lucene的系統(tǒng)結(jié)構(gòu)組織。這部分的分析,是深入Lucene系統(tǒng)的鑰匙,也是進(jìn)行重寫的基礎(chǔ)。Error! Reference source not found.即為Lucene系統(tǒng)中的主要數(shù)據(jù)流以及它們之間的關(guān)系圖:圖 22 Lucene數(shù)據(jù)流圖圖中共存在4種數(shù)據(jù)流,分別是文本流、token流、字節(jié)流與查詢語句對(duì)象流。文本流表示了對(duì)于索引目標(biāo)和交互控制的抽象,即用文本流表示了將要索引的文件,用文本流向用戶輸出信息;在實(shí)際的實(shí)現(xiàn)中,Lucene中的文本流采用了UCS-2作為編碼,以達(dá)到適應(yīng)多種語言文字的處理的目的。Token流是Lucene內(nèi)部所使用的概念,是對(duì)傳統(tǒng)文字

25、中的詞的概念的抽象,也是Lucene在建立索引時(shí)直接處理的最小單位;簡單的講Token就是一個(gè)詞和所在域值的組合,后面在敘述文件格式時(shí)也將繼續(xù)涉及到token,這里不詳細(xì)展開。字節(jié)流則是對(duì)文件抽象的直接操作的體現(xiàn),通過固定長度的字節(jié)(Lucene定義為8比特位長,后面文件格式將詳細(xì)敘述)流的處理,將文件操作解脫出來,也做到了與平臺(tái)文件系統(tǒng)的無關(guān)性。查詢語句對(duì)象流則是僅僅在查詢語句解析時(shí)用到的概念,它對(duì)查詢語句抽象,通過類的繼承結(jié)構(gòu)反映查詢語句的結(jié)構(gòu),將之傳送到查找邏輯來進(jìn)行查找的操作。圖中的涉及到了多種邏輯,基本上直接對(duì)應(yīng)于系統(tǒng)某一模塊,但是也有跨模塊調(diào)用的問題發(fā)生,這是因?yàn)長ucene的重用

26、程度非常好,因此很多實(shí)現(xiàn)直接調(diào)用了以前的工作成果,這在某種程度上其實(shí)是加強(qiáng)了模塊耦合性,但是也是為了避免系統(tǒng)的過于龐大和不必要的重復(fù)設(shè)計(jì)的一種折衷體現(xiàn)。詞法分析邏輯對(duì)應(yīng)于org.apache.lucene.analysis部分。查詢語句語法分析邏輯對(duì)應(yīng)于org.apache.lucene.queryParser部分,并且調(diào)用了org.apache.lucene.analysis的代碼。查詢結(jié)束之后向評(píng)分排序邏輯輸出token流,繼而由評(píng)分排序邏輯處理之后給出文本流的結(jié)果,這一部分的實(shí)現(xiàn)也包含在了org.apache.lucene.search中。索引構(gòu)建邏輯對(duì)應(yīng)于org.apache.luce

27、ne.index部分。索引查找邏輯則主要是org.apache.lucene.search,但是也大量的使用了org.apache.lucene.index部分的代碼和接口定義。存儲(chǔ)抽象對(duì)應(yīng)于org.apache.lucene.store。沒有提到的模塊則是做為系統(tǒng)公共基礎(chǔ)設(shè)施存在。第3章 校園網(wǎng)搜索系統(tǒng)設(shè)計(jì)3.1 體系結(jié)構(gòu)設(shè)計(jì)系統(tǒng)主要包含爬蟲器、查詢分析器、檢索器、索引器、中文分詞器、系統(tǒng)維護(hù)接口,異構(gòu)文本分析器等六個(gè)部分,其中的中間四個(gè)部分基于Lucene構(gòu)建。中文分詞器采用中科院漢語詞法分析系統(tǒng)ICTCLAS,通過JNI在系統(tǒng)中進(jìn)行調(diào)用。系統(tǒng)體系結(jié)構(gòu)如Error! Reference s

28、ource not found.所示。圖 31 系統(tǒng)體系結(jié)構(gòu)圖3.2 整體設(shè)計(jì)流程圖圖 32 整體設(shè)計(jì)流程圖首先需要建立一個(gè)空的URL數(shù)據(jù)庫,并且把起始根urls添加到URL數(shù)據(jù)庫中(步驟1),依據(jù)URL數(shù)據(jù)庫在新創(chuàng)建的segment中生成fetchlist,存放了待爬行的urls(步驟2),根據(jù)fetchlist從Internet進(jìn)行相關(guān)網(wǎng)頁內(nèi)容的爬行抓取與下載(步驟3),隨后把這些抓取到的內(nèi)容解析成文本與數(shù)據(jù)(步驟4),從中提取出新的網(wǎng)頁鏈接URL,并對(duì)URL數(shù)據(jù)庫進(jìn)行更新(步驟5),重復(fù)步驟2-5直到達(dá)到被指定的爬行抓取深度。以上過程構(gòu)成了系統(tǒng)的整個(gè)抓取過程,可以用一個(gè)循環(huán)來對(duì)其進(jìn)行描述

29、:生成抓取更新循環(huán)。當(dāng)抓取過程完成后,對(duì)抓取到的網(wǎng)頁進(jìn)行倒排索引,對(duì)重復(fù)的內(nèi)容與URL進(jìn)行剔除,然后對(duì)多個(gè)索引進(jìn)行合并,為搜索建立統(tǒng)一的索引庫,而后用戶可通過由Tomcat容器提供的系統(tǒng)搜索用戶界面提交搜索請(qǐng)求,然后由Lucene對(duì)索引庫進(jìn)行查詢,并返回搜索結(jié)果給用戶,完成整個(gè)搜索過程。3.3 引擎設(shè)計(jì)主要類圖3.3.1 語言分析類圖 33 語言分析類圖Analyzer是一個(gè)抽象類,負(fù)責(zé)對(duì)文本內(nèi)容的切分詞規(guī)則。切分后返回一個(gè)TokenStream,TokenStream中有一個(gè)非常重要方法next(),即取到下一個(gè)詞。通過切詞規(guī)則,把一篇文章從頭到尾分成一個(gè)個(gè)的詞,這就是org.apache.

30、lucene.analysis的工作。對(duì)英文而言,其分詞規(guī)則很簡單,因?yàn)槊總€(gè)單詞間都有一個(gè)空格,按空格取單詞即可,當(dāng)然為了提高英文檢索的準(zhǔn)確度,也可以把一些短語作為一個(gè)整體,其間不切分,這就需要一個(gè)詞庫。 對(duì)中文而言,文字之間都是相連的,沒有空格,但我們同樣可以把字切分,即把每個(gè)漢字作為一個(gè)詞切分,這就是所謂的“切字”,但切字方式的索引沒有意義,準(zhǔn)確率太低,要想提高準(zhǔn)確度一般都是切詞,這就需要一個(gè)詞庫,詞庫越大準(zhǔn)確度將越高,但入庫效率越低。3.3.2 文檔結(jié)構(gòu)類圖 34 文檔結(jié)構(gòu)類圖Document包相對(duì)而言比較簡單,主要包含3個(gè)類,Document對(duì)應(yīng)于關(guān)系型數(shù)據(jù)庫的記錄對(duì)象,主要負(fù)責(zé)字段的

31、管理,字段分兩種,一是Field,即文本型字段,另一個(gè)是日期型字段DateField。這個(gè)包中關(guān)鍵需要理解的是Field中字段存儲(chǔ)方式的不同。3.3.3 索引管理類索引包是整個(gè)系統(tǒng)核心,全文檢索的根本就為每個(gè)切出來的詞建索引,查詢時(shí)就只需要遍歷索引,而不需要去正文中遍歷,從而極大的提高檢索效率,索引建設(shè)的質(zhì)量關(guān)系到整個(gè)系統(tǒng)的質(zhì)量。Lucene的索引樹是非常優(yōu)質(zhì)高效的。類圖如Error! Reference source not found.和Error! Reference source not found.所示。圖 35 IndexWriter相關(guān)類圖圖 36 IndexReader相關(guān)類圖

32、全文檢索庫的初始化和記錄加載均需要通過IndexWriter和IndexReader類來完成。初始化全文庫的語句為:IndexWriter indexWriter = new IndexWriter(“全文庫的目錄位置”,new StandardAnalyzer(),true);記錄加載的語句為:indexWriter.addDocument(doc);IndexWriter主要用于寫庫,當(dāng)需要讀取庫內(nèi)容時(shí),需要通過IndexReader類來實(shí)現(xiàn)。3.3.4 查詢分析和檢索類圖 37 查詢與檢索類圖通過查詢分析器(queryParser)解析后,將返回一個(gè)查詢對(duì)象(query),根據(jù)查詢對(duì)象就

33、可進(jìn)行檢索。3.3.5 工具類圖 38 util工具類3.4 索引文件存儲(chǔ)抽象存儲(chǔ)抽象是唯一能夠直接對(duì)索引文件存取的包,因此其主要目的是抽象出和平臺(tái)文件系統(tǒng)無關(guān)的存儲(chǔ)抽象,提供諸如目錄服務(wù)(增、刪文件)、輸入流和輸出流。其UML類圖如下3幅圖所示:圖 39 存儲(chǔ)抽象實(shí)現(xiàn)UML圖(一)圖 310 存儲(chǔ)抽象實(shí)現(xiàn)UML圖(二)圖 311 存儲(chǔ)抽象實(shí)現(xiàn)UML圖(三)Error! Reference source not found.到Error! Reference source not found.展示了整個(gè)org.apache.lucene.store中主要的繼承體系。共有三個(gè)抽象類定義:Dire

34、ctory、InputStream和OutputStrem,構(gòu)成了一個(gè)完整的基于抽象文件系統(tǒng)的存取體系結(jié)構(gòu),在此基礎(chǔ)上,實(shí)現(xiàn)了:(FSDirectory,F(xiàn)SInputStream,F(xiàn)SOutputStream)和(RAMDirectory,RAMInputStream和RAMOutputStream)。前者是以實(shí)際的文件系統(tǒng)做為基礎(chǔ)實(shí)現(xiàn)的,后者則是建立在內(nèi)存中的虛擬文件系統(tǒng)。前者主要用來永久的保存索引文件,后者的作用則在于索引操作時(shí)是在內(nèi)存中建立小的索引,然后一次性的輸出合并到文件中去,這一點(diǎn)在后面的索引邏輯部分能夠看到。此外,還定義了org.apache.lucene.store.lock

35、和org.apache.lucene.store.with兩個(gè)輔助內(nèi)部實(shí)現(xiàn)的類,用在實(shí)現(xiàn)Directory方法的makeLock的時(shí)候,以在鎖定索引讀寫之前來讓用戶程序做一些準(zhǔn)備工作。FSDirectory,F(xiàn)SInputStream,F(xiàn)SOutputStream的內(nèi)部實(shí)現(xiàn)依托于java語言中的io類庫,只是簡單的做了一個(gè)外部邏輯的包裝。這當(dāng)然要?dú)w功于java語言所提供的跨平臺(tái)特性,同時(shí)也帶了一些隱患:文件存取的效率提升需要依賴于文件類庫的優(yōu)化。如果需要繼續(xù)優(yōu)化文件存取的效率,應(yīng)該還提供一個(gè)文件與目錄的抽象,以根據(jù)各種文件系統(tǒng)或者文件類型來提供一個(gè)優(yōu)化的機(jī)會(huì)。RAMDirectory,RAMI

36、nputStream和RAMOutputStream的內(nèi)部實(shí)現(xiàn)直接采用了虛擬的文件RAMFile類(定義于文件RAMDirectory.java中)來表示文件,目錄則看作一個(gè)String與RAMFile對(duì)應(yīng)的關(guān)聯(lián)數(shù)組。RAMFile中采用數(shù)組來表示文件的存儲(chǔ)空間。在此的基礎(chǔ)上,完成各項(xiàng)操作的實(shí)現(xiàn),就形成了基于內(nèi)存的虛擬文件系統(tǒng)。因?yàn)樵趯?shí)際使用時(shí),并不會(huì)牽涉到很大字節(jié)數(shù)量的文件,因此這種設(shè)計(jì)是簡單直接的,也是高效率的。一般使用的是抽象類提供的接口而不是實(shí)際的實(shí)現(xiàn)類本身。在實(shí)現(xiàn)類中一般都含有幾個(gè)靜態(tài)函數(shù),比如createFile,它能夠返回一個(gè)OutputStream接口,或者openFile,它

37、能夠返回一個(gè)InputStream接口,利用這些接口之中的方法,比如writeString,writeByte等等,就能夠在抽象的層次上處理Lucene定義的數(shù)據(jù)類型的讀寫。利用靜態(tài)類的方法也就是工廠來創(chuàng)建對(duì)象,返回接口,通過接口來執(zhí)行操作。第4章 校園網(wǎng)搜索系統(tǒng)實(shí)現(xiàn)基于校園網(wǎng)的自身特點(diǎn),本文研究并提出了相應(yīng)的解決辦法,并開發(fā)了針對(duì)校園網(wǎng)資源的專業(yè)搜索引擎。系統(tǒng)主要分為爬蟲器、索引器和檢索器3個(gè)模塊。爬蟲器對(duì)數(shù)據(jù)源進(jìn)行遍歷,盡量多地發(fā)現(xiàn)、下載新信息,并對(duì)下載的網(wǎng)頁進(jìn)行預(yù)處理以便進(jìn)行索引,包括提取其中的鏈接信息、網(wǎng)頁正文、標(biāo)題、鏈接標(biāo)注、URL等等;索引器則采用Lucene的全文檢索技術(shù)對(duì)文件庫

38、建立倒排索引;檢索模塊接收并分析用戶的查詢?cè)~,遍歷索引數(shù)據(jù)庫,最后將結(jié)果集返回給用戶。4.1 系統(tǒng)主要模塊的具體實(shí)現(xiàn)4.1.1 系統(tǒng)維護(hù)接口系統(tǒng)維護(hù)接口:本系統(tǒng)對(duì)索引內(nèi)容的更新采用定時(shí)器觸發(fā)后臺(tái)啟動(dòng)與手工啟動(dòng)兩種。每個(gè)子站點(diǎn)建立一個(gè)索引目錄,指定不同的索引目錄的路徑。這不僅可以靈活地放置索引數(shù)據(jù),而且也可以使得對(duì)每個(gè)子站點(diǎn)單獨(dú)進(jìn)行更新操作和訪問操作。系統(tǒng)對(duì)每個(gè)站點(diǎn)都提供兩種搜索策略與索引策略。搜索策略是寬度優(yōu)先搜索與深度優(yōu)先搜索兩種。索引策略是批量索引與增量索引兩種。批量索引是建立一個(gè)空索引,然后將被索引的文件以Document格式放在內(nèi)存中,當(dāng)索引文件達(dá)到參數(shù)mergeFactor 時(shí),索引

39、器一次將其寫入索引;增量索引是在原有索引的基礎(chǔ)上刪除增加被索引文件。每個(gè)站點(diǎn)這種的搜索與索引策略及其相關(guān)參數(shù)都存在xml 的配置文件中,可由系統(tǒng)維護(hù)人員通過該接口進(jìn)行修改。4.1.2 索引器使用的是Lucene 的索引器IndexWrite 類。修改該索引器所使用的語言分析器,使其支持中文分詞。系統(tǒng)采用字典切詞和雙字切詞相結(jié)合的技術(shù),利用JavaCC 編程實(shí)現(xiàn)。并且在生成索引器將支持中文漢字切分的語言分析器作為參數(shù)傳遞給索引器成為索引器的成員,使其在索引過程中使用該語言分析器進(jìn)行分詞。索引器采用的索引策略來自于xml 配置文件。批量索引器刪除原來的索引段,建立新的索引段,然后將所有的被索引文件

40、加入到索引段中。而增量索引器則是讀取原索引段的內(nèi)容,調(diào)用SegementReader 類的delete(term) 方法將包含某url 地址的被索引文件從索引中刪除,同時(shí)將被刪除文件的新內(nèi)容(或新文件) 加入索引段中。批量索引器和增量索引器,最后調(diào)用IndexWrite 類的addDocument () ,將搜索器抓取且轉(zhuǎn)換為Document 格式的文件,根據(jù)字段類型進(jìn)行分別處理,加入到索引段中。下面為索引器事項(xiàng)過程中的關(guān)鍵代碼:public class IndexFiles public static void main(String args) throws Exception Strin

41、g indexPath = args0; IndexWriter writer; /構(gòu)造IndexWriter; writer = new IndexWriter(indexPath, new SimpleAnalyzer(),false); for (int I=1;Iargs.length;I+) System.out.println(“Indexing file ”+argsi); InputStream is = new FileInputStream(argsi); Document doc = new Document(); /取得Document 對(duì)象實(shí)例; doc.add(Fi

42、eld.UnIndexed(“path”,argsi); /該實(shí)例包含path 域,不索引,但存儲(chǔ); doc.add(Field.Text(“body”,(Reader)new InputStreamReader(is); /該實(shí)例包含body 域,全文索引并存儲(chǔ); writer.addDocument(doc); is.close(); 4.1.3 查詢分析器使用的是Lucene和核心中的QueryParser類,對(duì)于用戶提交的查詢關(guān)鍵字組成的邏輯表達(dá)式進(jìn)行分析,生成系統(tǒng)內(nèi)部的查詢條件類Query。根據(jù)系統(tǒng)設(shè)定的校園辦公網(wǎng)根URL ,即 ,按寬度優(yōu)先搜索原則在校園網(wǎng)中抓取網(wǎng)頁,調(diào)用文件內(nèi)容分

43、析器分析文件內(nèi)容, 將其轉(zhuǎn)換為Document 格式輸出到索引器。每個(gè)Document 對(duì)象包含多個(gè)字段Field 對(duì)象,針對(duì)不同的字段屬性和數(shù)據(jù)輸出的需求,對(duì)字段還可以選擇不同的索引/ 存儲(chǔ)字段規(guī)則,如下表所示表 4.1 字段索引/存儲(chǔ)規(guī)則表方法分詞索引存儲(chǔ)適用字段Field. Text (String name ,String val2ue)是是是標(biāo)題,內(nèi)容字段,關(guān)鍵字Field. Text ( String name , Reader value)是是否內(nèi)容類型Field. Keyword ( String name ,String value)否是是最后修改日期Field. UnInd

44、exed ( String name ,String value)否否是URLField. UnStored ( String name ,String value)是是否4.1.4 索器調(diào)用Lucene 的搜索入口對(duì)索引進(jìn)行查詢,返回查詢結(jié)果。檢索時(shí),用戶提交檢索關(guān)鍵字,先調(diào)用Lucene 的查詢分析器分析用戶提交的查詢,然后調(diào)用IndexSearcher 類進(jìn)行搜索,返回結(jié)果為Hits 類??梢酝ㄟ^它再訪問Document中的 Field 內(nèi)容。本系統(tǒng)允許用戶對(duì)指定站點(diǎn)范圍查詢。對(duì)要查詢的每個(gè)子站點(diǎn)的索引目錄定義一個(gè)子檢索器( IndexSearcher 類) ,然后將其作為參數(shù)輸出到Lu

45、cene 的MultiSearcher 類中,調(diào)用MultiSearcher 類的search 方法對(duì)多個(gè)索引目錄進(jìn)行檢索。Multisearch 的search 方法不僅能夠調(diào)用子檢索器檢索索引,而且能將所有子檢索器檢索到的結(jié)果合并,然后重新排名。int size = index. size ();/ 索引目錄個(gè)數(shù)Searchable searcher = new Searchablesize ; for (int j = 0 ;j size ;j + + ) Searchable t - search ; String indexPath = ( ( WebSearchIndex ) in

46、dex. elementAt ( j ) ) . get IndexPath () ;/ / 得到索引目錄路徑 t - search = new org. apache. lucene. search. IndexSearcher (indexPath) ; / 生成子檢索器 searcher j = t - search ; multiSearcher = new org. apache. lucene. search. MultiSearcher(searcher) ; if (dateFilter = = null) / dateFilter 查詢過濾條件 hits = multiSea

47、rcher . search ( query) ;/ query 為用戶提交的查詢 else hits = multiSearcher . search (query ,dateFilter) ;4.2 關(guān)鍵技術(shù)研究4.2.1 中文分詞切詞對(duì)于搜索結(jié)果來說是十分重要的環(huán)節(jié),對(duì)于英文而言,只用關(guān)注空格即可實(shí)現(xiàn)切詞,而對(duì)于中文,由于中文詞匯非常豐富,詞語的組成十分不固定,所以中文切詞就變得比較困難?,F(xiàn)在比較普遍的是中文單字切詞、雙字切詞、字典切詞,對(duì)于單字切詞由于其一開始的不準(zhǔn)確性就被很多人放棄,最準(zhǔn)確的切詞方法應(yīng)該是字典切詞,匹配方法大致有前向匹配、后向匹配和基于統(tǒng)計(jì)的匹配。簡單舉例來說,對(duì)于“

48、中華人民”這句話,單字切詞就是把這四個(gè)字一個(gè)作為一個(gè)詞索引,搜索的時(shí)候逐字匹配,而雙字索引是把這句話依次按兩個(gè)字加以區(qū)分,分為“中華”“,華人”“,人民”這樣切詞。字典切詞則是相對(duì)于詞庫來尋找哪個(gè)應(yīng)該作為詞,而哪個(gè)不是,由此也可以知道,字典切詞是比較準(zhǔn)確的,但是由于漢語詞語的不斷變化和擴(kuò)充性,所以現(xiàn)在還要結(jié)合雙字切詞才可以更好地提高準(zhǔn)確度。由于字典切詞和雙字切詞的配合使用搜索引擎的匹配精度在很大程度上是可以得到保證的,期間參考了很多的切詞算法,通過程序集ICTCLAS來實(shí)現(xiàn)。4.2.2 解析網(wǎng)頁及索引入庫解析網(wǎng)頁就是要把網(wǎng)頁中的元素標(biāo)記(Token) 及其標(biāo)記之后的內(nèi)容提取出來,以利于入庫,相

49、對(duì)于每一個(gè)Token 建一個(gè)相應(yīng)的字段,而此Token 的內(nèi)容就是此字段的內(nèi)容。實(shí)現(xiàn)方法:建立一個(gè)Myparser 類,然后要實(shí)現(xiàn)讀入文件流,接著解析成字符串格式輸出,以備下一步處理,然后逐個(gè)提取Token 及其內(nèi)容。逐個(gè)提取Token 的目的是為了以后搜索的時(shí)候可以給不同的Token 加上不同的權(quán)值,從而可以很好地實(shí)現(xiàn)排序。提取Token 之后開始入庫:Myparser parser = new Myparser (f) ;Document doc = new Document () ;/ 用此方法逐個(gè)加入字段doc. Add(Field. Text (“title”, parser. Ge

50、t Title () ) ) ;至此,已經(jīng)可以實(shí)現(xiàn)對(duì)網(wǎng)頁的雙字索引入庫。但是入庫的時(shí)候要注意的是,提供了更新機(jī)制,現(xiàn)在采用的是簡單的更新機(jī)制,即單雙天機(jī)制,雙天查找到更新的時(shí)候索引到目錄一,單天的時(shí)候索引到目錄二,既可以天天更新,又可以不影響使用。4.2.3 網(wǎng)頁排序算法及檢索輸出PageRank和HITS算法在Google、Baidu等通用搜索引擎中發(fā)揮了極其重要的作用。此類算法基于對(duì)互聯(lián)網(wǎng)的鏈接分析,利用鏈接結(jié)構(gòu)形成的有向圖為每個(gè)網(wǎng)頁計(jì)算出一個(gè)權(quán)重,并根據(jù)權(quán)重的大小來決定該網(wǎng)頁在返回結(jié)果中出現(xiàn)的位置。權(quán)重代表的是一個(gè)網(wǎng)頁在整個(gè)互聯(lián)網(wǎng)上的“聲望”。在校園網(wǎng)環(huán)境中,由于本文之前提到的特點(diǎn),即網(wǎng)

51、頁大部分由各分院網(wǎng)站發(fā)布,并且網(wǎng)頁之間鏈接稀疏,通過鏈接結(jié)構(gòu)計(jì)算的網(wǎng)頁權(quán)重不能準(zhǔn)確反應(yīng)網(wǎng)頁與查詢之間的匹配程度。通過發(fā)現(xiàn),利用網(wǎng)頁與查詢之間的相關(guān)度對(duì)查詢結(jié)果排序更符合用戶的查詢要求,尤其是鏈接標(biāo)注和網(wǎng)頁標(biāo)題對(duì)網(wǎng)頁排序質(zhì)量的提高具有極其明顯的作用。在系統(tǒng)實(shí)現(xiàn)中,綜合利用了網(wǎng)頁正文、網(wǎng)頁標(biāo)題、鏈接標(biāo)注、鏈接入度、網(wǎng)頁深度等多項(xiàng)信息,綜合計(jì)算網(wǎng)頁與查詢?cè)~之間的相關(guān)度,作為查詢結(jié)果排序的依據(jù)。對(duì)于一個(gè)給定的查詢?cè)~Q,把數(shù)據(jù)集里所有在正文、標(biāo)題或鏈接標(biāo)注中包含該詞的網(wǎng)頁組成一個(gè)集合U,根據(jù)每一維度量都可以生成一個(gè)網(wǎng)頁序列。例如對(duì)“網(wǎng)頁正文”這一維度量,采用TF-IDF算法計(jì)算出一個(gè),經(jīng)過歸一化處理后,

52、我們可以按照對(duì)網(wǎng)頁排序得到;對(duì)于“網(wǎng)頁標(biāo)題”這一維度量,把查詢?cè)~在標(biāo)題詞串中所占的百分比作為排序的參考值,得到網(wǎng)頁序列;對(duì)于“文本格式”度量,給異構(gòu)文本和靜態(tài)網(wǎng)頁賦予較高的值,對(duì)動(dòng)態(tài)網(wǎng)頁賦予較低的值,根據(jù)不同網(wǎng)頁格式的值可以的得到排序;類似地,對(duì)于鏈接標(biāo)注、網(wǎng)頁入度、URL內(nèi)容、網(wǎng)頁深度,可以根據(jù)歸一化度量值得到網(wǎng)頁排序。利用這些度量值 的線性組合(4-1)作為最終網(wǎng)頁排序的度量,通過調(diào)整的值,得到最佳的排序效果。利用Kendall距離K(S,T)來判斷是否最佳。Kendall是一種計(jì)算簡單并且具有很好魯棒性的相關(guān)度測(cè)量方法,它計(jì)算兩個(gè)序列S、T中排列順序相反的元素對(duì)的數(shù)量。例如,假設(shè)S=1,

53、2,3,4,5,6,T=2,5,3,1,4,6,則T中與S中順序相反的元素有(2,1)、(5,3)、(5,1)、(5,4)、(3,1)共5對(duì),因冊(cè)T與S之間的Kendall距離為5.對(duì)Kendall距離如下歸一化處理就能得到S和T之間的相關(guān)度,其中n表示序列中元素的總數(shù),表示所有元素對(duì)的組合數(shù)量。(4-2)首先利用人工裁判對(duì)U進(jìn)行排序的一個(gè)基準(zhǔn)排序,分別計(jì)算就可以知道各維度量的排序與最佳排序之間的距離。為了測(cè)量一個(gè)排序算法對(duì)整個(gè)數(shù)據(jù)集的效果,可以選取一個(gè)查詢?cè)~的集合進(jìn)行上述計(jì)算,利用平均Kendall距離來評(píng)判某一維度量與最佳排序之間的距離(4-3)其中N代表查詢?cè)~集合中查詢?cè)~的個(gè)數(shù),這個(gè)值可

54、以作為取舍多維度量的依據(jù),并且相應(yīng)設(shè)置該維度量的初值(歸一化)。最終目標(biāo)是調(diào)整,使得最小。以下為搜索排序的主要代碼:Analyzer analyzer = new CJ KAnalyzer () ; / / 解析器 query = QueryParser . Parse ( queryString ,“contents”, analyzer) ; / / 實(shí)現(xiàn)搜索if (searcher ! = null) thispage = maxpage ; hits = searcher . Search (query) ; total - num = hits. Length() ;/ / 結(jié)果的個(gè)

55、數(shù)/ / 加亮顯示程序Highlighter highlighter = new Highlighter ( new QueryScorer(query) ) ; highlighter. Set Text Fragmenter ( new SimpleFragmenter(100) ) ;/ / 顯示搜索到的字符串的最大個(gè)數(shù),同時(shí)排序int maxNumFragmentsRequired = 3 ; for (int i = 0 ;i hits. Length() ; i + + ) System. String text = hits. Doc (i) . Get (“contents”)

56、 ; TokenStream tokenStream = analyzer . TokenStream (“con2 tents”, new System. IO. StringReader (text) ) ; highlightedText = highlighter . GetBest Fragments( tokenStream , text , maxNumFragmentsRequired ,“”) ;檢索頁面:圖 41 檢索頁面檢索結(jié)果輸出頁面:圖 42 檢索“校園” 結(jié)果網(wǎng)頁評(píng)分頁面:對(duì)具體某個(gè)網(wǎng)的評(píng)分4.2.4 PDF等異構(gòu)文本處理異構(gòu)文本的文本格式與HTML類型的文件完全不同,必須進(jìn)行相應(yīng)的格式轉(zhuǎn)換才能支持全文檢索。在進(jìn)行網(wǎng)頁格式化時(shí)自動(dòng)識(shí)別具體的文件類型和版本,調(diào)用相應(yīng)的轉(zhuǎn)換程序?qū)悩?gòu)文本轉(zhuǎn)換為普通文本格式。并對(duì)該網(wǎng)頁加入標(biāo)記,在查詢結(jié)果排序時(shí)提高該類型網(wǎng)頁

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論