

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