版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 摘 要</b></p><p> 在互聯(lián)網(wǎng)蓬勃發(fā)展的今天,互聯(lián)網(wǎng)上的信息更是浩如煙海。人們在享受互聯(lián)網(wǎng)帶來的便利的同時(shí),卻面臨著一個(gè)如何在如此海量的內(nèi)容中準(zhǔn)確、快捷地找到自己所需要的信息的問題,由此互聯(lián)網(wǎng)搜索引擎應(yīng)運(yùn)而生。</p><p> 本文在對(duì)搜索引擎的原理、組成、數(shù)據(jù)結(jié)構(gòu)和工作流程等方面深入研究的基礎(chǔ)上,對(duì)搜索引擎的三個(gè)
2、核心部分即網(wǎng)絡(luò)蜘蛛、網(wǎng)頁索引和搜索的分析及實(shí)現(xiàn)過程進(jìn)行闡述。網(wǎng)絡(luò)蜘蛛部分采用了基于遞歸和歸檔機(jī)制的Heritrix網(wǎng)絡(luò)搜索;網(wǎng)頁索引部分利用開源的Lucene引擎架構(gòu)設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)可復(fù)用的、可擴(kuò)展的索引建立與管理子系統(tǒng);搜索部分在Ajax技術(shù)支持上,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)靈活、簡潔的用戶接口。本系統(tǒng)具有抓取網(wǎng)頁、建立和管理索引、建立索引以及搜索信息等功能,具備一定的應(yīng)用前景。</p><p> 關(guān)鍵詞:搜索引擎;中
3、文分詞;索引</p><p> The Construction of Search Engine Based on Lucene and Heritrix</p><p><b> Abstract</b></p><p> The contents on the Web are increasing exponentially as
4、the rapid development of the Internet. A problem how to obtain the useful information from vast contents quickly and accurately is facing us while people are enjoying the convenience of the Internet. The solver of this p
5、roblem is Web Search Engine.</p><p> The analysis and implementation process of three basic components of search engine(Crawler, Indexer and Searcher) is described in this paper on the basis of further stud
6、y on the principles, composition, data structure and work flow of search engine. The crawler component is implemented with Heritrix crawler based on the mechanism of recursion and archiving; A reusable, extensible index
7、establishment and management subsystem are designed and implemented by open-source package named “Lucene” in th</p><p> Key Words:Search Engine;Chinese Word Segmentation;Index</p><p><b>
8、 目 錄</b></p><p><b> 摘 要I</b></p><p> AbstractII</p><p><b> 1 緒論1</b></p><p> 1.1 項(xiàng)目背景1</p><p> 1.2 國內(nèi)外發(fā)展現(xiàn)狀1&l
9、t;/p><p> 2 系統(tǒng)的開發(fā)平臺(tái)及相關(guān)技術(shù)3</p><p> 2.1 系統(tǒng)開發(fā)平臺(tái)3</p><p> 2.2 系統(tǒng)開發(fā)技術(shù)3</p><p> 2.2.1 Heritrix網(wǎng)絡(luò)搜索簡介3</p><p> 2.2.2 Lucene技術(shù)簡介4</p><p> 2.2.
10、3 Ajax技術(shù)簡介4</p><p> 3 系統(tǒng)分析與設(shè)計(jì)6</p><p> 3.1 系統(tǒng)需求分析6</p><p> 3.1.1 系統(tǒng)架構(gòu)分析6</p><p> 3.1.2 系統(tǒng)用例模型6</p><p> 3.1.3 系統(tǒng)領(lǐng)域模型10</p><p> 3.2
11、系統(tǒng)概要設(shè)計(jì)11</p><p> 3.3 系統(tǒng)詳細(xì)設(shè)計(jì)12</p><p> 3.3.1 索引建立子系統(tǒng)13</p><p> 3.3.2 用戶接口子系統(tǒng)17</p><p> 3.3.3 數(shù)據(jù)庫設(shè)計(jì)17</p><p> 4 系統(tǒng)的實(shí)現(xiàn)18</p><p> 4.1
12、系統(tǒng)包框架的構(gòu)建18</p><p> 4.1.1 索引建立子系統(tǒng)18</p><p> 4.1.2 用戶接口子系統(tǒng)19</p><p> 4.2 系統(tǒng)主要功能實(shí)現(xiàn)19</p><p> 4.2.1 索引建立子系統(tǒng)19</p><p> 4.2.2 用戶接口子系統(tǒng)22</p><
13、;p><b> 結(jié) 論24</b></p><p> 參 考 文 獻(xiàn)25</p><p><b> 致 謝26</b></p><p><b> 1 緒論</b></p><p><b> 1.1 項(xiàng)目背景</b><
14、/p><p> 1994年左右,萬維網(wǎng)(world wide web)出現(xiàn)了。它的開放性和其上信息廣泛的可訪問性極大的激勵(lì)了人們創(chuàng)作的積極性。在短短的十幾年間,人類至少在萬維網(wǎng)上發(fā)布了40億條的網(wǎng)頁,并且現(xiàn)在每天都有數(shù)以萬計(jì)的數(shù)量增長。由于網(wǎng)絡(luò)上的資源與生俱來的數(shù)字化、網(wǎng)絡(luò)化,這些特性成為了網(wǎng)絡(luò)信息的雙刃劍:一方面便于我們搜集整理,另一方面也會(huì)使我們感到太多蜂擁而至,無所適從。而搜索引擎的由來要追溯到1990年加拿
15、大的麥吉爾大學(xué),麥吉爾大學(xué)的師生為了在分散在FTP資源上找到所需的東西,他們開發(fā)了軟件Archie。它通過定期搜索并分析FTP系統(tǒng)中存在的文件名信息,提供查找分布在各個(gè)FTP主機(jī)中文件的服務(wù)。當(dāng)Web風(fēng)靡全球之后,以Web網(wǎng)頁為對(duì)象的搜索引擎檢索系統(tǒng)產(chǎn)生了。成為人們上網(wǎng)找尋信息的重要手段,通過搜索引擎系統(tǒng)人們可以在浩如煙海的網(wǎng)絡(luò)中瞬間找到想要找到的信息,并且搜索引擎的智能以及現(xiàn)在網(wǎng)頁的特性使得人們只要輸入相關(guān)的詞語就可以找到直接相關(guān)的信
16、息。</p><p> 現(xiàn)今,Google的巨大成功讓整個(gè)世界都把眼光投入到搜索引擎這個(gè)領(lǐng)域中。仿佛一夜間,各種各樣的搜索服務(wù)席卷而來。從最初的Google、Yahoo到現(xiàn)今的Baidu、MSN、中搜、Sogou等,搜索引擎的品牌愈來愈多,服務(wù)也越來越豐富。同時(shí),伴隨著Web2.0的普及,網(wǎng)絡(luò)信息的膨脹速度呈指數(shù)急速增長,各種各樣的網(wǎng)站都需要為其加入檢索功能,以滿足用戶的需要。另外,在企業(yè)級(jí)應(yīng)用的市場上,全文信
17、息檢索的需求也一直在增加,各種文檔處理、內(nèi)容管理軟件都需要鍵入全文檢索的功能。</p><p> 在這種背景下,搜索引擎的技術(shù)迅速發(fā)展。各種討論搜索的文章、雜志、論文鋪天蓋地,論壇和博客上也有許多相關(guān)帖子。一時(shí)間,搜索引擎技術(shù)成為最熱門的技術(shù)之一。</p><p> 1.2 國內(nèi)外發(fā)展現(xiàn)狀</p><p> 網(wǎng)頁是因特網(wǎng)的最主要的組成部份,也是人們獲取網(wǎng)絡(luò)信息
18、的最主要的來源,為了方便人們在大量繁雜的網(wǎng)頁中找尋自己需要的信息,這類檢索工具發(fā)展的最快。一般認(rèn)為,基于網(wǎng)頁的信息檢索工具主要有網(wǎng)頁搜索引擎和網(wǎng)絡(luò)分類目錄兩種。網(wǎng)頁搜索引擎是通過“網(wǎng)絡(luò)蜘蛛”等網(wǎng)頁自動(dòng)搜尋軟件搜索到網(wǎng)頁,然后自動(dòng)給網(wǎng)頁上的某些或全部字符做上索引,形成目標(biāo)摘要格式文件以及網(wǎng)絡(luò)可訪問的數(shù)據(jù)庫,供人們檢索網(wǎng)絡(luò)信息的檢索工具。網(wǎng)絡(luò)目錄則是和搜索引擎完全不同,它不會(huì)將整個(gè)網(wǎng)絡(luò)中每個(gè)網(wǎng)站的所有頁面都放進(jìn)去,而是由專業(yè)人員謹(jǐn)慎地選擇網(wǎng)
19、站的首頁,將其放入相應(yīng)的類目中。網(wǎng)絡(luò)目錄的信息量要比搜索引擎少得多,再加上不同的網(wǎng)絡(luò)目錄分類標(biāo)準(zhǔn)有些混亂,不便人們使用,因此雖然它標(biāo)引質(zhì)量比較高,利用它的人還是要比利用搜索引擎的人少的多。</p><p> 但是由于網(wǎng)絡(luò)信息的復(fù)雜性和網(wǎng)絡(luò)檢索技術(shù)的限制,這類檢索工具也有著明顯的不足:</p><p> (1) 隨著網(wǎng)頁數(shù)量的迅猛增加,人工無法對(duì)其進(jìn)行有效的分類、索引和利用。網(wǎng)絡(luò)用戶面對(duì)
20、的是數(shù)量巨大的未組織信息,簡單的關(guān)鍵詞搜索,返回的信息數(shù)量之大,讓用戶無法承受。</p><p> (2) 信息有用性評(píng)價(jià)困難。一些站點(diǎn)在網(wǎng)頁中大量重復(fù)某些關(guān)鍵字,使得容易被某些著名的搜索引擎選中,以期借此提高站點(diǎn)的地位,但事實(shí)上卻可能沒有提供任何對(duì)用戶有價(jià)值的信息。</p><p> (3) 網(wǎng)絡(luò)信息日新月異的變更,人們總是期望挑出最新的信息。然而網(wǎng)絡(luò)信息時(shí)刻變動(dòng),實(shí)時(shí)搜索幾乎不可能
21、,就是剛剛瀏覽過的網(wǎng)頁,也隨時(shí)都有更新、過期、刪除的可能。</p><p> 網(wǎng)絡(luò)信息檢索工具的發(fā)展主要體現(xiàn)在進(jìn)一步改進(jìn)、完善檢索工具和檢索技術(shù),以提高檢索服務(wù)質(zhì)量,改變網(wǎng)絡(luò)信息檢索不盡如意的地方。</p><p> 2 系統(tǒng)的開發(fā)平臺(tái)及相關(guān)技術(shù)</p><p> 該系統(tǒng)開發(fā)需要J2EE和J2SE相關(guān)技術(shù),開發(fā)平臺(tái)要求合理、方便、快捷,開發(fā)環(huán)境的選取至關(guān)重要,
22、當(dāng)選取一種相對(duì)合理的開發(fā)平臺(tái)時(shí),會(huì)提高系統(tǒng)開發(fā)效率,并遵循以最低的消耗完成最有價(jià)值的工程這一原則。</p><p> 2.1 系統(tǒng)開發(fā)平臺(tái)</p><p> 本系統(tǒng)的開發(fā)平臺(tái)如下表2.1所示:</p><p> 表2.1 系統(tǒng)開發(fā)平臺(tái)配置</p><p> 2.2 系統(tǒng)開發(fā)技術(shù)</p><p> 2.2.1
23、Heritrix網(wǎng)絡(luò)搜索簡介</p><p> Heritrix是一個(gè)由Java開發(fā)的、開源的Web網(wǎng)絡(luò)搜索,用戶可以使用它從網(wǎng)絡(luò)上抓取想要的資源。Heritrix最出色之處在于它的可擴(kuò)展性,開發(fā)者可以擴(kuò)展它的各個(gè)組件,來實(shí)現(xiàn)自己的抓取邏輯。Heritrix設(shè)計(jì)成嚴(yán)格按照robots.txt文件的排除指示和META robots標(biāo)簽。</p><p> Heritrix是IA的開放源代
24、碼,可擴(kuò)展的,基于整個(gè)Web的,歸檔網(wǎng)絡(luò)搜索工程。</p><p> Heritrix工程始于2003年初,IA的目的是開發(fā)一個(gè)特殊的搜索,對(duì)網(wǎng)上的資源進(jìn)行歸檔,建立網(wǎng)絡(luò)數(shù)字圖書館,在過去的6年里,IA已經(jīng)建立了400TB的數(shù)據(jù)。</p><p> (1) Heritrix 1.0.0包含以下關(guān)鍵特性:</p><p> ?、?用單個(gè)搜索在多個(gè)獨(dú)立的站點(diǎn)一直不斷
25、的進(jìn)行遞歸的爬。</p><p> ?、?從一個(gè)提供的種子進(jìn)行爬,收集站點(diǎn)內(nèi)的精確URI和精確主機(jī)。</p><p> ?、?主要是用廣度優(yōu)先算法進(jìn)行處理。</p><p> ?、?主要部件都是高效的可擴(kuò)展的。</p><p><b> ?、?良好的配置。</b></p><p> (2) He
26、ritrix的局限:</p><p> ?、?單實(shí)例的搜索,之間不能進(jìn)行合作。</p><p> ② 在有限的機(jī)器資源的情況下,卻要復(fù)雜的操作。</p><p> ?、?只有官方支持,僅僅在Linux上進(jìn)行了測試。</p><p> ④ 每個(gè)搜索是單獨(dú)進(jìn)行工作的,沒有對(duì)更新進(jìn)行修訂。</p><p> ?、?在硬件
27、和系統(tǒng)失敗時(shí),恢復(fù)能力很差。</p><p> ⑥ 很少的時(shí)間用來優(yōu)化性能。</p><p> 2.2.2 Lucene技術(shù)簡介</p><p> Lucene是apache軟件基金會(huì)jakarta項(xiàng)目組的一個(gè)子項(xiàng)目,是一個(gè)開放源代碼的全文檢索引擎工具包,即它不是一個(gè)完整的全文檢索引擎,而是一個(gè)全文檢索引擎的架構(gòu),提供了完整的查詢引擎和索引引擎,部分文本分析引
28、擎(英文與德文兩種西方語言)。Lucene的目的是為軟件開發(fā)人員提供一個(gè)簡單易用的工具包,以方便的在目標(biāo)系統(tǒng)中實(shí)現(xiàn)全文檢索的功能,或者是以此為基礎(chǔ)建立起完整的全文檢索引擎。</p><p> 面對(duì)已經(jīng)存在的商業(yè)全文檢索引擎,Lucene也具有相當(dāng)?shù)膬?yōu)勢。首先,它的開發(fā)源代碼發(fā)行方式,在此基礎(chǔ)上程序員不僅僅可以充分的利用Lucene所提供的強(qiáng)大功能,而且可以深入細(xì)致的學(xué)習(xí)到全文檢索引擎制作技術(shù)和面相對(duì)象編程的實(shí)踐
29、,進(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è)計(jì)了一個(gè)合理而極具擴(kuò)充能力的面向?qū)ο蠹軜?gòu),程序員可以在Lucene的基礎(chǔ)上擴(kuò)充各種功能,比如擴(kuò)充中文處理能力,從文本擴(kuò)充到HTML、PDF等等文本格式的處理,編寫這些擴(kuò)展的功能不僅僅不復(fù)雜,而且由于Lucene恰當(dāng)合理的對(duì)系統(tǒng)設(shè)備做了程序上的抽象,擴(kuò)展的功
30、能也能輕易的達(dá)到跨平臺(tái)的能力。最后,轉(zhuǎn)移到apache軟件基金會(huì)后,借助于apache軟件基金會(huì)的網(wǎng)絡(luò)平臺(tái),程序員可以方便的和開發(fā)者、其它程序員交流,促成資源的共享,甚至直接獲得已經(jīng)編寫完備的擴(kuò)充功能。最后,雖然Lucene使用Java語言寫成,但是開放源代碼社區(qū)的程序員正在不懈的將之使用各種傳統(tǒng)語言實(shí)現(xiàn),在遵守Lucene索引文件格式</p><p> 2.2.3 Ajax技術(shù)簡介</p>&l
31、t;p> (1) Ajax(Asynchronous JavaScript + XML)的定義</p><p> ?、?基于web標(biāo)準(zhǔn)(standards-based presentation)XHTML+CSS的表示;</p><p> ?、?使用 DOM(Document Object Model)進(jìn)行動(dòng)態(tài)顯示及交互;</p><p> ?、?使用 XM
32、L 和 XSLT 進(jìn)行數(shù)據(jù)交換及相關(guān)操作;</p><p> ?、?使用 XMLHttpRequest 進(jìn)行異步數(shù)據(jù)查詢、檢索;</p><p> ?、?使用 JavaScript 將所有的東西綁定在一起。</p><p> (2) Ajax核心</p><p> Ajax的核心是JavaScript對(duì)象XmlHttpRequest。該對(duì)
33、象在Internet Explorer 5中首次引入,它是一種支持異步請求的技術(shù)。簡而言之,XmlHttpRequest使您可以使用JavaScript向服務(wù)器提出請求并處理響應(yīng),而不阻塞用戶。</p><p> (3) 使用Ajax可以完成的功能</p><p> 在創(chuàng)建Web站點(diǎn)時(shí),在客戶端執(zhí)行屏幕更新為用戶提供了很大的靈活性。下面是使用Ajax可以完成的功能:</p>
34、<p> ① 動(dòng)態(tài)更新購物車的物品總數(shù),無需用戶單擊Update并等待服務(wù)器重新發(fā)送整個(gè)頁面。</p><p> ?、?提升站點(diǎn)的性能,這是通過減少從服務(wù)器下載的數(shù)據(jù)量而實(shí)現(xiàn)的。例如,在某購物車頁面,當(dāng)更新籃子中的一項(xiàng)物品的數(shù)量時(shí),會(huì)重新載入整個(gè)頁面,這必須下載整個(gè)頁面的數(shù)據(jù)。如果使用Ajax計(jì)算新的總量,服務(wù)器只會(huì)返回新的總量值,因此所需的帶寬僅為原來的百分之一。消除了每次用戶輸入時(shí)的頁面刷新。
35、例如,在Ajax中,如果用戶在分頁列表上單擊Next,則服務(wù)器數(shù)據(jù)只刷新列表而不是整個(gè)頁面。</p><p> ?、?直接編輯表格數(shù)據(jù),而不是要求用戶導(dǎo)航到新的頁面來編輯數(shù)據(jù)。對(duì)于Ajax,當(dāng)用戶單擊Edit時(shí),可以將靜態(tài)表格刷新為內(nèi)容可編輯的表格。用戶單擊Done之后,就可以發(fā)出一個(gè)Ajax請求來更新服務(wù)器,并刷新表格,使其包含靜態(tài)、只讀的數(shù)據(jù)。</p><p> (4) Ajax的工
36、作原理</p><p> Ajax的工作原理相當(dāng)于在用戶和服務(wù)器之間加了—個(gè)中間層,使用戶操作與服務(wù)器響應(yīng)異步化。這樣把以前的一些服務(wù)器負(fù)擔(dān)的工作轉(zhuǎn)嫁到客戶端,利于客戶端閑置的處理能力來處理,減輕服務(wù)器和帶寬的負(fù)擔(dān),從而達(dá)到節(jié)約ISP的空間及帶寬租用成本的目的。</p><p><b> 3 系統(tǒng)分析與設(shè)計(jì)</b></p><p> 3.
37、1 系統(tǒng)需求分析</p><p> 3.1.1 系統(tǒng)架構(gòu)分析</p><p><b> (1) 系統(tǒng)定位</b></p><p> 系統(tǒng)定位為用于網(wǎng)頁、影視和圖片的搜索。</p><p><b> (2) 系統(tǒng)結(jié)構(gòu)</b></p><p> 系統(tǒng)總體包括三大系統(tǒng)模塊
38、:網(wǎng)絡(luò)搜索、索引建立子系統(tǒng)和用戶接口子系統(tǒng)。如圖3.1所示。</p><p> 圖3.1 系統(tǒng)結(jié)構(gòu)圖</p><p> ?、?網(wǎng)絡(luò)搜索的主要任務(wù)是從目標(biāo)源定時(shí)抓取信息資源,比如圖片、網(wǎng)頁等。</p><p> ?、?索引建立子系統(tǒng)主要任務(wù)是根據(jù)網(wǎng)絡(luò)搜索抓取的資源進(jìn)行分析、正文抽取,利用分詞器將提取的資源進(jìn)行分詞、倒排建立索引。</p><p&g
39、t; ?、?用戶接口子系統(tǒng)的主要任務(wù)是為用戶提供可搜索接口,用戶通過web界面輸入詞條,向服務(wù)器發(fā)出請求,服務(wù)器經(jīng)過簡單處理將處理后的詞條傳遞給搜索器,再以xml格式傳給客戶端,客戶端利用XmlHttpRequest來接受數(shù)據(jù),將數(shù)據(jù)處理顯示給用戶。</p><p> 3.1.2 系統(tǒng)用例模型</p><p> 系統(tǒng)涉及的角色有用戶和后臺(tái)維護(hù)人員,用戶主要的場景有對(duì)想要的信息進(jìn)行搜索,
40、而后臺(tái)維護(hù)人員的主要場景有抓取資源、維護(hù)資源、建立索引、維護(hù)索引和維護(hù)索引等,以下是對(duì)兩個(gè)角色的部分用例場景的分析:</p><p> (1) 詳述用例:用戶進(jìn)行影視搜索</p><p><b> 主要參與者:用戶</b></p><p><b> 相關(guān)人員及興趣:</b></p><p>
41、 用戶希望系統(tǒng)能很好的理解自己的意思,并能準(zhǔn)確快速的返回自己想要的信息。</p><p> 維護(hù)人員希望系統(tǒng)能夠運(yùn)作良好,盡量快速的給出用戶解決方案。</p><p> 前置條件:用戶可以與服務(wù)器良好連接,服務(wù)器狀態(tài)良好</p><p><b> 主要成功場景:</b></p><p> ?、?用戶進(jìn)入web界面,
42、輸入想要搜索的詞</p><p> ② 用戶在下拉列表中選擇影視</p><p> ?、?用戶點(diǎn)擊搜索按鈕,提交請求</p><p> ?、?系統(tǒng)進(jìn)行分析處理,并搜索結(jié)果</p><p> ?、?系統(tǒng)返回并顯示結(jié)果</p><p><b> ⑥ 用戶退出</b></p><
43、p><b> 擴(kuò)展:</b></p><p> ?、?用戶沒有輸入信息</p><p> 沒有錯(cuò)誤提示信息,仍然停留在本頁面。</p><p> ?、?用戶輸入空格或制表符</p><p> 沒有錯(cuò)誤提示信息,刷新頁面。</p><p> ③ 用戶沒有選擇影視</p>
44、<p> 系統(tǒng)返回當(dāng)前選擇類型的信息。</p><p> ④ 系統(tǒng)失去連接或崩潰</p><p><b> 系統(tǒng)提示連接超時(shí)</b></p><p> 用戶等待系統(tǒng)響應(yīng),直到恢復(fù)正常</p><p><b> ?、?系統(tǒng)崩潰</b></p><p> 返回
45、錯(cuò)誤信息,提示用戶系統(tǒng)出現(xiàn)故障,用戶退出</p><p> (2) 詳述用例:后臺(tái)維護(hù)人員建立索引</p><p> 主要參與者:維護(hù)人員</p><p><b> 相關(guān)人員及其興趣:</b></p><p> 維護(hù)人員希望系統(tǒng)能快速方便的完成建立索引任務(wù),并能產(chǎn)生索引,以便維護(hù)。</p><
46、p> 前置條件:維護(hù)人員有可利用資源</p><p><b> 主要成功場景:</b></p><p> ?、?維護(hù)人員整理可利用資源,打開索引建立子系統(tǒng)</p><p> ?、?維護(hù)人員在配置文件中修改資源目錄</p><p> ③ 配置運(yùn)行時(shí)參數(shù)后,點(diǎn)擊建立索引</p><p>
47、?、?系統(tǒng)產(chǎn)生索引文件并產(chǎn)生索引</p><p> 用例場景已經(jīng)分析出來,下一個(gè)階段是利用用例畫出用例圖。這樣更加直觀顯示出參與者與系統(tǒng)的交互流程。用例圖如圖3.2所示。</p><p><b> 用例圖表述如下:</b></p><p> (1) 用戶進(jìn)行影視搜索用例產(chǎn)生的用例圖系統(tǒng)外參與者為用戶,系統(tǒng)事件包括用戶選取類型,搜索信息和資
48、源鏈接。</p><p> (2) 后臺(tái)維護(hù)人員進(jìn)行資源抓取用例產(chǎn)生的用例圖系統(tǒng)參與者是后臺(tái)維護(hù)人員,系統(tǒng)事件包括定制抓取任務(wù),抓取資源,在抓取資源的過程中涉及到的是外部資源持有者。</p><p> (3) 后臺(tái)維護(hù)人員建立索引用例產(chǎn)生的用例圖主要參與者為后臺(tái)維護(hù)人員,系統(tǒng)事件包括資源預(yù)處理、規(guī)范化、噪音過濾、正文抽取、索引建立、索引建立和索引維護(hù)。</p><p
49、> 圖3.2 部分用例語境圖</p><p> 詳述用例和用例圖已經(jīng)完成分析,接下來是根據(jù)用例來畫出系統(tǒng)順序圖。系統(tǒng)順序圖將系統(tǒng)視為黑盒,注重的是參與者與系統(tǒng)之間的交互過程,對(duì)用例場景進(jìn)行分析如下:</p><p> (1) 用戶進(jìn)行影視搜索用例中用戶和搜索系統(tǒng)其實(shí)就是用戶和用戶接口子系統(tǒng)的交互,主體為用戶和接口子系統(tǒng),系統(tǒng)順序圖如圖3.3所示。</p><
50、p> 圖3.3 用戶與系統(tǒng)交互的系統(tǒng)順序圖</p><p> (2) 后臺(tái)維護(hù)人員進(jìn)行資源抓取用例的主體是后臺(tái)維護(hù)人員和Heritrix搜索子系統(tǒng),兩者交互過程如圖3.4所示。</p><p> 圖3.4 維護(hù)人員與網(wǎng)絡(luò)搜索交互的系統(tǒng)順序圖</p><p> (3) 后臺(tái)維護(hù)人員建立索引用例的主體是后臺(tái)維護(hù)人員和索引建立子系統(tǒng),兩者交互過程如圖3.5所
51、示。</p><p> 圖3.5 維護(hù)人員與索引建立子系統(tǒng)交互系統(tǒng)順序圖</p><p> 系統(tǒng)順序圖已經(jīng)繪制出來,經(jīng)過分析得出了系統(tǒng)和外部參與者的交互過程,大概的分析出系統(tǒng)應(yīng)該承擔(dān)的責(zé)任和參與者的責(zé)任,在用戶和系統(tǒng)之間,用戶扮演的角色是把系統(tǒng)當(dāng)成黑盒來看,只是需要系統(tǒng)給出自己想要的信息,用戶的責(zé)任只是將詞條輸入進(jìn)去,而此時(shí)的系統(tǒng)的責(zé)任就比較繁忙了,它會(huì)首先將信息進(jìn)行處理,轉(zhuǎn)換成讓搜索
52、器認(rèn)識(shí)的詞語或單字,這樣就可以進(jìn)行下一項(xiàng),利用搜索器在索引庫中搜索對(duì)應(yīng)的信息,當(dāng)信息被檢索出來,再對(duì)結(jié)果進(jìn)行篩選,最后將其放入實(shí)體對(duì)象封裝起來,形成xml格式傳給客戶端,這就是用戶和系統(tǒng)的交互,并對(duì)用戶和系統(tǒng)內(nèi)部進(jìn)行了簡單流程分析;在維護(hù)人員和系統(tǒng)之間,維護(hù)人員責(zé)任是建立和維護(hù)索引以及索引,對(duì)于維護(hù)人員的責(zé)任就是盡量為系統(tǒng)的進(jìn)一步工作做準(zhǔn)備,并做好維護(hù)工作,而系統(tǒng)的責(zé)任就是對(duì)維護(hù)人員選取的資源進(jìn)行處理、正文抽取、建立索引、維護(hù)索引和建立
53、索引。這些是在這個(gè)階段簡單分析出來的過程。下一階段是對(duì)以上所有信息進(jìn)行領(lǐng)域模型抽取。</p><p> 3.1.3 系統(tǒng)領(lǐng)域模型</p><p> 對(duì)參與者和系統(tǒng)的交互過程進(jìn)行領(lǐng)域模型抽取,首先是名詞概念抽?。篢erm(詞條),TermDisposo(詞條處理器),Searcher(搜索器),EntitySet(實(shí)體集),IndexStore(索引庫),F(xiàn)ileSpider(文件蜘蛛)
54、,F(xiàn)ileFilter(文件過濾器),Entity(實(shí)體)等,領(lǐng)域模型圖如圖3.6和3.7所示。</p><p> 圖3.6 用戶接口子系統(tǒng)部分領(lǐng)域模型</p><p> 圖3.7 索引建立子系統(tǒng)部分領(lǐng)域模型</p><p> 3.2 系統(tǒng)概要設(shè)計(jì)</p><p> 在需求分析階段,產(chǎn)生的用例模型和領(lǐng)域模型帶入設(shè)計(jì)階段,現(xiàn)在可以大概設(shè)
55、計(jì)系統(tǒng)的構(gòu)架,如圖3.8所示。</p><p> 以下是對(duì)架構(gòu)設(shè)計(jì)的敘述:</p><p> (1) Heritrix搜索系統(tǒng)</p><p> 主要是應(yīng)用Heritrix搜索抓取資源,而這些并不屬于這此工程開發(fā)任務(wù),所以不納入設(shè)計(jì)開發(fā)。</p><p> (2) 索引建立子系統(tǒng)</p><p> 主要是建立
56、索引,及其周邊一些操作。要設(shè)計(jì)索引建立子系統(tǒng),必須要了解索引建立過程,領(lǐng)域模型中已經(jīng)可以看出此子系統(tǒng)的大概框架,首先要利用文件搜索將資源目錄下的所有文件路徑收集起來,再經(jīng)過文件過濾器將自己感興趣的文件路徑得到,得到的路徑經(jīng)過正文抽取器將數(shù)據(jù)抽取出來,這樣就可以利用抽取出來的數(shù)據(jù)進(jìn)行索引建立。在熟悉了搜索引擎建立的過程后,可以對(duì)其架構(gòu)進(jìn)行設(shè)計(jì),可以在流程中看出資源文件就像是一批材料,索引建立子系統(tǒng)就像是工廠,將材料加工輸出成品,所以可以將
57、該流程設(shè)計(jì)成流水線形式,可以將資源路徑作為流水線上的材料,疵品被剔除掉,經(jīng)過流水線的一系列操作后,索引最后輸出。</p><p> (3) 用戶接口子系統(tǒng)</p><p> 用戶接口子系統(tǒng)是用戶利用用戶接口子系統(tǒng)進(jìn)行搜索,這部分可能設(shè)計(jì)到的技術(shù)是Ajax,Lucene Searcher等,利用Ajax的用戶操作與服務(wù)器響應(yīng)異步化特性,可以實(shí)現(xiàn)局部數(shù)據(jù)傳輸,只將用戶所需要的信息返回即可,
58、這樣大大降低了服務(wù)器和客戶端交互量,用戶可以創(chuàng)建接近本地桌面應(yīng)用的直觀、豐富和動(dòng)態(tài)的Web用戶界面。</p><p> 3.3 系統(tǒng)詳細(xì)設(shè)計(jì)</p><p> 在框架設(shè)計(jì)中,簡要的設(shè)計(jì)出來了各個(gè)子系統(tǒng)的整體流程,下面則是對(duì)索引建立子系統(tǒng)和用戶接口子系統(tǒng)的設(shè)計(jì)。</p><p> 3.3.1 索引建立子系統(tǒng)</p><p><b&g
59、t; (1) 實(shí)體設(shè)計(jì)</b></p><p> 實(shí)體的設(shè)計(jì)的目的是封裝資源抽取出來的數(shù)據(jù),這樣有利于使用和傳遞數(shù)據(jù)。在實(shí)體設(shè)計(jì)的上層是Entity,它繼承自O(shè)bject類,是所有實(shí)體的父類。在本項(xiàng)目中只設(shè)計(jì)了三個(gè)實(shí)體:Movie、Text和Image,分別對(duì)應(yīng)影視、網(wǎng)頁和圖片。實(shí)體關(guān)系圖如圖3.9所示。</p><p> 圖3.9 實(shí)體之間關(guān)系圖</p>
60、<p><b> (2) 抽取器設(shè)計(jì)</b></p><p> 提到正文抽取技術(shù),當(dāng)今流行的技術(shù)有基于分裝器的網(wǎng)頁文本信息抽取技術(shù)、基于統(tǒng)計(jì)的網(wǎng)頁正文抽取技術(shù)和基于數(shù)據(jù)挖掘思想的網(wǎng)頁正文抽取技術(shù)。</p><p> ① 基于分裝器的網(wǎng)頁文本信息抽取技術(shù),該方法屬于傳統(tǒng)的網(wǎng)頁信息抽取方法。它使用分裝器(wrapper)來抽取網(wǎng)頁中感興趣的數(shù)據(jù)。分裝器(也
61、稱為:包裝器)是一個(gè)程序,它根據(jù)一定的信息模式識(shí)別知識(shí)從特定的信息源中抽取相關(guān)內(nèi)容,并以特定形式加以表示。</p><p> ?、?基于統(tǒng)計(jì)的網(wǎng)頁文本信息抽取技術(shù),該方法克服了傳統(tǒng)的網(wǎng)頁內(nèi)容抽取方法需要針對(duì)不同的數(shù)據(jù)源構(gòu)造不同的包裝器的缺點(diǎn),具有一定的普遍性。該方法對(duì)網(wǎng)頁正文信息的抽取依賴閾值P和T,閾值P決定了選擇網(wǎng)頁正文的文本塊。</p><p> ?、?基于數(shù)據(jù)挖掘思想的網(wǎng)頁正文抽取
62、技術(shù),這類方法把數(shù)據(jù)挖掘技術(shù)應(yīng)用到對(duì)網(wǎng)頁自由文本的處理中,大大提高對(duì)網(wǎng)頁正文(文章)抽取的準(zhǔn)確率,突破了數(shù)據(jù)挖掘技術(shù)在應(yīng)用方面對(duì)結(jié)構(gòu)化數(shù)據(jù)的依賴,是一種很好的正文抽取技術(shù)。但仍然有一些普遍性問題有待進(jìn)一步改善。</p><p> 三種技術(shù)中基于數(shù)據(jù)挖掘的網(wǎng)頁正文抽取技術(shù)實(shí)現(xiàn)難度很大,在此次項(xiàng)目中不加以考慮,所以采用前兩種技術(shù)。在現(xiàn)今比較流行的開源項(xiàng)目中,HtmlParser是基于分裝器的技術(shù),而基于統(tǒng)計(jì)的技術(shù)要
63、自己來分析設(shè)計(jì)一種算法。這種算法的開發(fā)也是接下來的重要任務(wù)之一。</p><p> 在抽取器設(shè)計(jì)中,影視和圖片的抽取器基于分裝器技術(shù),而網(wǎng)頁抽取器是基于統(tǒng)計(jì)技術(shù),出于這樣的考慮是因?yàn)橛耙暫蛨D片在網(wǎng)頁中的結(jié)構(gòu)比較固定,比如說圖片,一般都封裝在img標(biāo)記中,這樣利用分裝器很容易就可以抽取出來,而對(duì)于網(wǎng)頁的抽取就不那么容易了,大量的網(wǎng)站中的網(wǎng)頁結(jié)構(gòu)不是相同的,存在很大的差異,不適合利用分裝器抽取,所以選取了更為便捷的
64、方式,基于統(tǒng)計(jì)的抽取技術(shù)。抽取器之間的關(guān)系圖如圖3.10所示。</p><p> 圖3.10 抽取器之間關(guān)系圖</p><p> (3) 中文正文抽取算法設(shè)計(jì)</p><p> 對(duì)于影視和圖片的抽取利用基于分裝器的方法,只要目標(biāo)網(wǎng)頁結(jié)構(gòu)比較穩(wěn)定,并對(duì)目標(biāo)網(wǎng)頁進(jìn)行分析,就很容易利用HtmlParser進(jìn)行內(nèi)容抽取。</p><p> 對(duì)
65、于基于統(tǒng)計(jì)的方法算法設(shè)計(jì)思路如下:</p><p> 設(shè)計(jì)中涉及的數(shù)據(jù)結(jié)構(gòu)有樹和棧:樹用于存儲(chǔ)Html文件中每個(gè)標(biāo)記塊中的內(nèi)容,類中應(yīng)該包含對(duì)樹節(jié)點(diǎn)的一些操作;棧利用棧將Html文件建立數(shù)據(jù)樹。在用輸入流讀取文件的時(shí)候,將開始標(biāo)記放入棧中,繼續(xù)讀取數(shù)據(jù),直到對(duì)應(yīng)的結(jié)束標(biāo)記出現(xiàn),這個(gè)就是一個(gè)內(nèi)容塊,將其放入樹節(jié)點(diǎn)中,這樣就可以很方便的將Html文件構(gòu)造成一樹結(jié)構(gòu)。</p><p> 樹結(jié)
66、構(gòu)已經(jīng)構(gòu)造出來就可以進(jìn)行統(tǒng)計(jì)分析,將內(nèi)容塊中的正文通過有效算法篩選出來,在這里利用了標(biāo)準(zhǔn)方差,它表示了一組數(shù)據(jù)的波動(dòng)性,如果波動(dòng)越大,方差值越大,反之,方差越小。其實(shí)這種方法總結(jié)起來就有兩個(gè)條件:內(nèi)容塊長度相對(duì)較大并且除去這個(gè)內(nèi)容塊剩下的內(nèi)容塊長度波動(dòng)相對(duì)較小。主要的思路是利用循環(huán),每次都取出當(dāng)前未選塊中長度最大的塊作為候選塊,再計(jì)算剩余塊長度的標(biāo)準(zhǔn)方差,上一次得到的方差值(第一次是所有內(nèi)容塊的方差值)與本次得到的值相減,如果這個(gè)值是最
67、大的說明它就是含有正文的內(nèi)容塊。</p><p> (4) 索引建造器設(shè)計(jì)</p><p> 這里要基于Lucene檢索工具包的支持,Lucene提供了從索引建立到搜索的一系列工具,這可以使開發(fā)者方便的開發(fā)一個(gè)索引建立及搜索的框架。提到Lucene,不得不提及其中兩個(gè)最重要的概念:Document和Field,Lucene將Document設(shè)計(jì)為邏輯文件,存儲(chǔ)各種各樣的Field,而F
68、ield存儲(chǔ)的是數(shù)據(jù)源的數(shù)據(jù)內(nèi)容,任何與索引文檔相關(guān)的操作都是在Document和Field的基礎(chǔ)上完成的。</p><p> 在Document設(shè)計(jì)過程中使用Factory模式,DocumentFactory可以根據(jù)對(duì)象進(jìn)行識(shí)別然后建立對(duì)應(yīng)的Document。</p><p> 在Lucene索引建立過程中,需要有分析器對(duì)數(shù)據(jù)進(jìn)行分詞過濾。一個(gè)標(biāo)準(zhǔn)的分析器由兩部分組成一部分時(shí)分詞器,
69、另一部分是過濾器。一個(gè)分析器往往由一個(gè)分詞器和多個(gè)過濾器組成。</p><p> 提到分詞,尤其是中文分詞,是建立索引的重點(diǎn),也是難點(diǎn),因?yàn)橹形氖鞘澜缟献顝?fù)雜的語言之一,想對(duì)中文進(jìn)行完全精確的分詞,能夠正確的表達(dá)其內(nèi)在的含義,幾乎是不可能的。所以建立索引的重點(diǎn)又落到分詞上來?,F(xiàn)在比較流行的分詞方式有單字分詞、二分法和基于詞典三種,其中單字就是將中文文本分詞時(shí),以字為單位進(jìn)行切分,但是這種方法需要復(fù)雜的單字匹配算
70、法,以及大量的CPU運(yùn)算;二分法就是將每兩個(gè)字當(dāng)作一個(gè)詞語進(jìn)行切分,然后建立索引,這種方式會(huì)產(chǎn)生一些無詞義的詞條,這樣就會(huì)浪費(fèi)當(dāng)量的索引空間;基于詞典的分詞是通過構(gòu)造一個(gè)常用詞詞典來對(duì)所遇到的文本進(jìn)行詞語的切分。Lucene中提供了幾種中文分析器其中StandardAnalyzer是基于單字分詞技術(shù),另外在中文分詞中中科院的ICTCLAS分詞是網(wǎng)上被人提及最多的一個(gè)分詞軟件。它是基于詞典分詞技術(shù)。還有一種也在中文分詞中應(yīng)用比較多的就是J
71、E分詞,它也是基于詞典分詞技術(shù),它的亮點(diǎn)在于它提供了API,可以添加新詞。在本項(xiàng)目中,將三者都整合了進(jìn)來。索引建立器關(guān)系圖如圖3.11所示。</p><p> 圖3.11 索引建造器之間關(guān)系圖</p><p><b> (5) 處理器設(shè)計(jì)</b></p><p> 處理器設(shè)計(jì)的目的是讓它完成像工廠流水線的功能,它的任務(wù)就是要將各種部件組合
72、起來,形成流水線,此過程可以是執(zhí)行的或是執(zhí)行一次。在層次設(shè)計(jì)上,Processor作為所有處理器類的父類,其子類有IndexBuildProcessor和搜索Processor,后者是將網(wǎng)頁一次性就可以完成流水線工作,針對(duì)影視、網(wǎng)頁和圖片,而前者會(huì)針對(duì)一種類型進(jìn)行處理。它們之間的關(guān)系圖如圖3.12所示。</p><p> 圖3.12 處理器之間關(guān)系圖</p><p> 3.3.2 用戶
73、接口子系統(tǒng)</p><p> (1) Web GUI設(shè)計(jì)</p><p> 搜索界面的設(shè)計(jì)應(yīng)該是簡潔并能快捷響應(yīng),應(yīng)當(dāng)減少頁面的跳轉(zhuǎn)和刷新,所以將Ajax技術(shù)加入是非常好的設(shè)計(jì)。參考著名的搜索引擎如百度、谷歌和雅虎等,可以將首頁設(shè)計(jì)成如圖3.13所示。</p><p> 圖3.13 首頁設(shè)計(jì)圖</p><p><b> (2
74、) 分頁設(shè)計(jì)</b></p><p> 分頁問題應(yīng)該說是Web搜索引擎的一個(gè)常見的問題。在得到搜索結(jié)果后,通常,結(jié)果的數(shù)量眾多,無法在一個(gè)頁面內(nèi)顯示。在本項(xiàng)目中利用在客戶端緩存結(jié)果的做法,但這種做法只適合于少量數(shù)據(jù)的處理,當(dāng)檢索結(jié)果太多時(shí),會(huì)影響響應(yīng)速度,并有可能造成內(nèi)存溢出。當(dāng)然這種方法實(shí)現(xiàn)起來比較簡單,對(duì)于本項(xiàng)目比較適合。</p><p> (3) 圖片處理設(shè)計(jì)<
75、/p><p> 圖片處理主要的目的是將圖片置于項(xiàng)目以外的目錄,設(shè)計(jì)過程主要利用Servlet將圖片以流的形式輸出,這樣做就不必將圖片放入用戶接口子系統(tǒng)中。</p><p><b> (4) 搜索流程圖</b></p><p><b> ?。?</b></p><p> 3.3.2 數(shù)據(jù)庫系統(tǒng)設(shè)計(jì)&
76、lt;/p><p><b> 3-3采集規(guī)則表</b></p><p><b> 3-4采集索引表</b></p><p> 3-5采集結(jié)果存儲(chǔ)表</p><p> 3.3.3 展示搜索結(jié)果</p><p> 3.3.4展示采集結(jié)果</p><p&g
77、t;<b> 4 系統(tǒng)的實(shí)現(xiàn)</b></p><p> 4.1 系統(tǒng)包框架的構(gòu)建</p><p> 4.1.1 索引建立子系統(tǒng)</p><p> 搜索_SearchEngineCore1_0是搜索搜索引擎的核心主要是資源整理,索引建立,索引建立等工作,源文件包結(jié)構(gòu)及說明如下:</p><p> com.搜索.c
78、lassbuild 包存放類構(gòu)造類,作用是可以利用類路徑構(gòu)造實(shí)例;</p><p> com.搜索.configuration 包存放配置文件操作類包;</p><p> com.搜索.documentfactory 包存放Document制造工廠;</p><p> com.搜索.entity 包存放實(shí)體類;</p><p> co
79、m.搜索.entityset 包存放實(shí)體集類;</p><p> com.搜索.extractor 包存放抽取器類;</p><p> com.搜索.extractor.impl 包存放抽取器實(shí)現(xiàn)類;</p><p> com.搜索.extractor.nodefilter 包存放節(jié)點(diǎn)過濾器實(shí)現(xiàn)類;</p><p> com.搜索.f
80、ile 存放文件有關(guān)的操作,主要是文件搜索和文件路徑結(jié)果集類;</p><p> com.搜索.filefilter.impl 存放文件過濾器的實(shí)現(xiàn)類;</p><p> com.搜索.filefilter 存放文件過濾類;</p><p> com.搜索.formovie 存放為影視服務(wù)的類;</p><p> com.搜索.for
81、page 存放為網(wǎng)頁服務(wù)的類;</p><p> com.搜索.helper 存放幫助類;</p><p> com.搜索.image 存放圖片處理類,主要是圖片拷貝類;</p><p> com.搜索.index 存放與索引有關(guān)的類,主要是索引構(gòu)造器;</p><p> com.搜索.index.impl 存放索引構(gòu)造器的實(shí)現(xiàn)類;&
82、lt;/p><p> com.搜索.log 存放索引操作類;</p><p> com.搜索.processor 存放處理器類;</p><p> com.搜索.split 存放利用ICTCLAS對(duì)實(shí)體進(jìn)行分詞的類;</p><p> com.搜索.textextraction 存放正文抽取算法類;</p><p>
83、; com.搜索.xml 存放對(duì)xml操作類;</p><p> com.xjt.nlp.word 存放對(duì)于ICTCLAS分詞器類;</p><p> config 存放配置文件;</p><p> data存放ICTCLAS分詞所用的數(shù)據(jù)文件;</p><p> entities 存放實(shí)體xml配置文件;</p>&
84、lt;p> log 存放索引文件;</p><p> config、data、entities和log文件夾與src源文件夾是同一級(jí),在工程根目錄下。</p><p> 4.1.2 用戶接口子系統(tǒng)</p><p> 搜索_SearchEngineFace1_0是用戶接口子系統(tǒng),包結(jié)構(gòu)如下:</p><p> com.搜索.da
85、tabase 存放數(shù)據(jù)庫操作類;</p><p> com.搜索.entity 存放實(shí)體類;</p><p> com.搜索.entityset 存放實(shí)體集類;</p><p> com.搜索.forimage 存放為圖片服務(wù)的類;</p><p> com.搜索.formovie 存放為影視服務(wù)的類;</p><
86、p> com.搜索.forpage 存放為網(wǎng)頁服務(wù)的類;</p><p> com.搜索.helper 存放幫助類;</p><p> com.搜索.properties 存放屬性操作類;</p><p> com.搜索.search 存放搜索器類;</p><p> com.搜索.search.servlet 存放servl
87、et類;</p><p> 4.2 系統(tǒng)主要功能實(shí)現(xiàn)</p><p> 4.2.1 索引建立子系統(tǒng)</p><p> (1) FileSpider文件搜索基本實(shí)現(xiàn)</p><p> 主要方法:public FileResultSet crawlFile(String dir)</p><p> 方法實(shí)現(xiàn)原理:
88、首先實(shí)例化FileResultSet對(duì)象reports,再利用參數(shù)dir建立File類對(duì)象root,root調(diào)用listFile()方法得到root目錄下的所有文件及文件夾,然后利用循環(huán)遞歸調(diào)用crawlFile方法。將得到的文件放入reports中,最后返回reports。其中for循環(huán)代碼如下:</p><p> for (int i = 0; i < files.length; i++) {<
89、/p><p> if (files[i].isDirectory()) //判斷文件是否為文件夾</p><p> crawlFile(files[i].getAbsolutePath());//遞歸調(diào)用crawFile方法</p><p><b> else</b></p><p> reports.add(fil
90、es[i].getAbsolutePath());//將路徑放入reports中</p><p><b> }</b></p><p> (2) FileFilter文件過濾器基本實(shí)現(xiàn)</p><p> 文件過濾器的主要工作是過濾掉自己不感興趣的文件,比如HtmlFileFilter是將非.html文件過濾掉。在這里只描述部分類實(shí)現(xiàn),如下
91、:</p><p> ?、?FileFiler類基本實(shí)現(xiàn)</p><p> 主要方法:public abstract FileResultSet filtrateUnvaluedFile(FileResultSet source);</p><p> 過程描述:FileFilter類是抽象類,是所有文件過濾器的父類,它只有一個(gè)抽象方法,其子類都要實(shí)現(xiàn)這個(gè)方法。它
92、的作用是過濾無價(jià)值文件。該方法返回有價(jià)值的文件路徑集合。</p><p> ② HtmlFileFilter類基本實(shí)現(xiàn)</p><p> HtmlFileFilter類也是一個(gè)抽象類,繼承自FileFilter類。</p><p> 主要方法:public abstract FileResultSet filtrateUnvaluedFile(FileResu
93、ltSet source);</p><p> public boolean containsTag(Tag tag, String path)</p><p> 過程描述:filtrateUnvaluedFile方法是抽象的,沒有實(shí)現(xiàn)。</p><p> containsTag方法主要是檢驗(yàn)Html文件中是否含有某個(gè)標(biāo)記。</p><p&
94、gt; containsTag方法實(shí)現(xiàn)的主要原理:首先實(shí)例化org.htmlparser.Parser對(duì)象parser,Parser是分裝器,可以解析Html文件。將path作為Parser構(gòu)造函數(shù)參數(shù)初始化parser,再利用paser對(duì)象的parser方法提取網(wǎng)頁中所有的節(jié)點(diǎn)標(biāo)記,將其放入NodeList對(duì)象nodes中,代碼如下:</p><p> NodeList nodes = parser.par
95、se(NodeFilterFactory.createAndFilter(tag));</p><p> 其中NodeFilterFactor是自己定義的節(jié)點(diǎn)過濾器工廠,它可以產(chǎn)生指定的節(jié)點(diǎn)過濾器。下一步的工作是判斷nodes的個(gè)數(shù),如果是零個(gè)說明該網(wǎng)頁中不包含tag標(biāo)記,所以返回false;反之,則返回true。</p><p> ?、?HtmlFileFilterForMovie類基
96、本實(shí)現(xiàn)</p><p> 該類繼承自HtmlFileFilter類。</p><p> 主要方法:public FileResultSet filtrateUnvaluedFile(FileResultSet source) </p><p> public boolean isValuable(String path)</p><p>
97、; 過程描述:filtrateUnvaluedFile在這里實(shí)現(xiàn)了,它主要判斷是否為Html文件并檢驗(yàn)一些標(biāo)記特征是否符合要求,首先實(shí)例化FileResultSet對(duì)象valuableReports,用于保留有價(jià)值的文件路徑,再利用source的迭代器進(jìn)行循環(huán)判斷,如果符合放入valuableReports中,反之,繼續(xù)循環(huán)。</p><p> 最后返回valuableReports對(duì)象,此過程中用到了isV
98、aluable方法,以下是對(duì)isValuable方法的描述:</p><p> isValuable主要的功能是檢驗(yàn)Html文件是否包含某些標(biāo)記,它是結(jié)合實(shí)體xml配置文件進(jìn)行檢驗(yàn)的,比如影視實(shí)體的配置文件如下所示:</p><p><b> <movie></b></p><p> <tag key="pic
99、" type="div"></p><p> <attribute type="class">main_home_movie_pics</attribute></p><p><b> </tag></b></p><p><b> ……
100、</b></p><p><b> </movie></b></p><p> 其中可以很清楚的看到對(duì)tag的描述,比如上例中,Html文件應(yīng)該包含<div class=” main_home_movie_pics”></div>標(biāo)記,可以通過EntityExtractorAssistant的實(shí)例ass抽取信息,En
101、tityExtractorAssistant是基于Dom4J的xml解析器。接下來利用ass的方法getTags得到所有的標(biāo)記,再利用父類中的containTag方法判斷Html文件是否包含這些標(biāo)記,最后如果全部包含返回true,反之,如果有一個(gè)不符合返回false。</p><p> (3) Extractor抽取器基本實(shí)現(xiàn)</p><p> ① 基于分裝器的抽取器基本實(shí)現(xiàn)</
102、p><p> 以HtmlExtractorForMovie為例描述一下這類抽取器的基本實(shí)現(xiàn),如下:</p><p> 基于分裝器的抽取器主要的工作在于如何利用分裝器將某些標(biāo)記下的內(nèi)容提取出來,比如說<div class=” main_home_movie_pics”></div>標(biāo)記下有需要的內(nèi)容。剛才簡單介紹了實(shí)體配置文件,這里就利用這個(gè)配置文件對(duì)Html文件進(jìn)行
103、內(nèi)容提取,大致流程如下:</p><p> 首先定義實(shí)體實(shí)例,利用EntityExtractorAssistant將實(shí)體配置文件中的約束標(biāo)記提取出來,再利用分裝器從Html文件中將帶有約束標(biāo)記的內(nèi)容提取出來,最后對(duì)內(nèi)容做一下處理,將內(nèi)容放入實(shí)體實(shí)例中,返回實(shí)體實(shí)例。</p><p> ② 基于統(tǒng)計(jì)的抽取器基本實(shí)現(xiàn)</p><p> 抽取器的實(shí)現(xiàn)部分主要集中在篩
104、選算法上,其利用了標(biāo)準(zhǔn)方差的計(jì)算方法,實(shí)現(xiàn)過程如下:</p><p> int sum = 0;</p><p> int num = 0;</p><p> int len = sizeBlock.length;</p><p> // 獲得還未被選取塊個(gè)數(shù)及其總長度</p><p> for (int i
105、 = 0; i < len; i++)</p><p> if (!staBlock[i]) {</p><p><b> num++;</b></p><p> sum += sizeBlock[i];</p><p><b> }</b></p><p>
106、 // 定義還未被選取塊平均長度</p><p> double avg = (double) sum / (1.0 * (double) num);</p><p><b> // 計(jì)算方差</b></p><p> double err = 0.0;</p><p> for (int i = 0; i &l
107、t; len; i++)</p><p> if (!staBlock[i]) {</p><p> double val = (double) sizeBlock[i] - avg;</p><p> val *= val;</p><p> err += val;</p><p><b> }&
108、lt;/b></p><p><b> // 計(jì)算標(biāo)準(zhǔn)方差</b></p><p> return Math.sqrt(err) / (1.0 * (double) num);</p><p> (4) IndexBuilder索引構(gòu)造器基本實(shí)現(xiàn)</p><p> IndexBuilder類基本方法實(shí)現(xiàn)如下
109、:</p><p> 主要方法:public void addEntity(Entity entity)</p><p> protected boolean hasExist(Entity entity)</p><p> 過程描述:addEntity方法的功能是向索引中寫入實(shí)體對(duì)象內(nèi)容,利用IndexWriter類的方法write將封裝了實(shí)體內(nèi)容的Docu
110、ment寫入索引中。最后關(guān)閉IndexWriter實(shí)例,結(jié)束添加實(shí)體。主要代碼如下:</p><p> //利用IndexWriter實(shí)例writer添加Document實(shí)例</p><p> writer.addDocument(EntityDocumentFactory.buildEntityDocument(entity));</p><p> hasE
111、xist方法主要是判斷索引中是否含有了實(shí)體信息,其中以Entity中的屬性keyAttribute為關(guān)鍵值檢查。</p><p> 這是IndexBuilder類的基本實(shí)現(xiàn),在項(xiàng)目中還有三個(gè)類:JEIndexBuilder、ICT_IndexBuilder和StarndardIndexBuilder,它們繼承類IndexBuilder類,主要實(shí)現(xiàn)addEntity方法。</p><p>
112、 4.2.2 用戶接口子系統(tǒng)</p><p> (1) 搜索器基本實(shí)現(xiàn)</p><p> 搜索器的實(shí)現(xiàn)需要有Lucene技術(shù)的支持。</p><p> 主要方法:public EntitySet getSearchResults(String key)</p><p> 實(shí)現(xiàn)過程:首先將key進(jìn)行處理,利用分詞器進(jìn)行切分,然后實(shí)例化
113、IndexSearcher為searcher,再利用實(shí)例searcher調(diào)用方法search得到Hits結(jié)果集,再對(duì)結(jié)果集進(jìn)行分析處理。其實(shí)在這個(gè)過程中對(duì)分詞器的選取應(yīng)用了三個(gè)分詞器JE,ICTCLAS和StandardAnalyzer,三個(gè)分詞器原理已經(jīng)在設(shè)計(jì)中提到,因?yàn)樵跇?gòu)造索引用到的分詞器和對(duì)輸入的詞進(jìn)行切分的分詞器是一個(gè),必須相同。三個(gè)分詞器可以對(duì)三個(gè)索引庫進(jìn)行搜索,但順序并不是并行的,首先在ICTCLAS對(duì)應(yīng)庫中搜索,無結(jié)果再
114、在JE對(duì)應(yīng)庫中搜索,最后如果前兩中沒有結(jié)果再在StandardAnalyzer對(duì)應(yīng)庫搜索。這樣會(huì)返回更符合用戶要求的信息,但也會(huì)帶來效率問題。</p><p> (2) 請求響應(yīng)Servlet基本實(shí)現(xiàn)</p><p> 因?yàn)閼?yīng)用類Ajax技術(shù),在請求響應(yīng)的Servlet中要以xml的格式傳輸數(shù)據(jù),在實(shí)體內(nèi)部定義一個(gè)可以將自己屬性封裝到xml格式字符串中是有必要的,在Servlet直接調(diào)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)設(shè)計(jì)論文--基于lucene與heritrix的搜索引擎構(gòu)建
- 基于lucene的搜索引擎.pdf
- 畢業(yè)論文——基于ajax lucene構(gòu)建搜索引擎的設(shè)計(jì)與實(shí)現(xiàn)
- 基于Lucene的企業(yè)搜索引擎.pdf
- 基于lucene的主題搜索引擎研究
- 畢業(yè)論文——基于ajax lucene構(gòu)建搜索引擎的設(shè)計(jì)與實(shí)現(xiàn)
- 基于Lucene的搜索引擎優(yōu)化.pdf
- 游戲搜索引擎 --搜索引擎demo系統(tǒng)中l(wèi)ucene索引的實(shí)現(xiàn)---畢業(yè)論文
- 基于lucene的web搜索引擎實(shí)現(xiàn)
- 游戲搜索引擎 --搜索引擎demo系統(tǒng)中l(wèi)ucene索引的實(shí)現(xiàn)---畢業(yè)論文
- 基于nutch+lucene搜索引擎的搭建--搜索引擎技術(shù)的相關(guān)設(shè)計(jì)與分析-畢業(yè)論文
- 基于Lucene的Web搜索引擎實(shí)現(xiàn).pdf
- 基于Lucene的搜索引擎的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于Lucene的主題搜索引擎研究.pdf
- 基于Lucene全文檢索構(gòu)建教育搜索引擎的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于Lucene的博客搜索引擎設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于Lucene搜索引擎的研究與應(yīng)用.pdf
- 基于Lucene的搜索引擎應(yīng)用與研究.pdf
- 基于LUCENE的搜索引擎研究與實(shí)現(xiàn).pdf
- 基于Lucene的Web搜索引擎的研究.pdf
評(píng)論
0/150
提交評(píng)論