賈超 衛(wèi)文學(xué)
山東科技大學(xué)信息科學(xué)與工程學(xué)院,山東 青島 266590
基于Heritrix和Lucene的專題搜索引擎研究
賈超 衛(wèi)文學(xué)
山東科技大學(xué)信息科學(xué)與工程學(xué)院,山東 青島 266590
專題搜索引擎也稱垂直搜索引擎,主要用來(lái)滿足特定領(lǐng)域的用戶需求。Heritrix是開(kāi)源的網(wǎng)絡(luò)爬蟲(chóng),Heritrix的WebUI啟動(dòng)方式并不易用于廣大用戶。本文改變了往常對(duì)Heritrix用法,摒棄了Heritrix的WebUI啟動(dòng)方式,對(duì)Heritrix源碼進(jìn)行修改,將Lucene整合到Heritrix中,構(gòu)建成一個(gè)完整的搜索引擎,并通過(guò)監(jiān)聽(tīng)器監(jiān)聽(tīng)搜索引擎狀態(tài),使搜索引擎能夠進(jìn)行自動(dòng)爬取和數(shù)據(jù)更新。同時(shí),本文添加了網(wǎng)頁(yè)過(guò)濾模塊以及對(duì)查詢結(jié)果排序算法進(jìn)行了改進(jìn),提高了搜索引擎的易用性和查詢的準(zhǔn)確率。
專題搜索引擎;Heritrix;Lucene;排序算法
thematic search engine; Heritrix; Lucene; sorting algorithm
萬(wàn)維網(wǎng)上信息浩瀚萬(wàn)千,而且毫無(wú)秩序,所有的信息像汪洋上的一個(gè)個(gè)小島,而搜索引擎正如一副地圖可以讓用戶一目了然[1]。但在使用通用的搜索引擎時(shí),返回的結(jié)果往往成千上萬(wàn),用戶需要花費(fèi)大量的時(shí)間甄選自己真正感興趣的信息,很難準(zhǔn)確返回用戶需求[2]。垂直搜索引擎正好為解決該問(wèn)題,提出了很好的解決方案,它是一個(gè)針對(duì)某個(gè)行業(yè)的專業(yè)搜索引擎,是對(duì)網(wǎng)頁(yè)庫(kù)中某類專門信息的一次重新整合,為某一特定領(lǐng)域、某一特定人群或某一特定需求提供有一定價(jià)值的信息和服務(wù)[3]。
常見(jiàn)Heritrix的使用方法往往是通過(guò)WebUI方式啟動(dòng)并進(jìn)行相應(yīng)的爬取配置后,才能進(jìn)行爬取。該方法并不容易被用戶接受和使用,同時(shí)會(huì)爬取大量的冗余和無(wú)用的網(wǎng)頁(yè)。本文通過(guò)將Lucene整合的Heritrix中,在網(wǎng)頁(yè)下載前,進(jìn)行網(wǎng)頁(yè)過(guò)濾,并對(duì)查詢結(jié)果排序的算法進(jìn)行改進(jìn),提高了查詢的準(zhǔn)確率,搜索引擎會(huì)根據(jù)專題的相關(guān)配置信息進(jìn)行自動(dòng)的爬取和更新。
1 Heritrix與Lucene介紹
專題搜索引擎的實(shí)現(xiàn)過(guò)程,主要分為三個(gè)步驟:(1)抓取網(wǎng)頁(yè)。(2)對(duì)網(wǎng)頁(yè)進(jìn)行處理,建立索引文件庫(kù)。(3)進(jìn)行查詢。本文中使用Heritrix實(shí)現(xiàn)從萬(wàn)維網(wǎng)上抓取網(wǎng)頁(yè),Lucene負(fù)責(zé)對(duì)網(wǎng)頁(yè)進(jìn)行處理和查詢。
1.1 網(wǎng)絡(luò)爬蟲(chóng)Heritrix
Heritrix是一個(gè)由Java開(kāi)發(fā)的、開(kāi)源的Web網(wǎng)絡(luò)爬蟲(chóng),用戶使用它從網(wǎng)絡(luò)上抓取特定的網(wǎng)頁(yè)或文檔等資源[4]。Heritrix可以通過(guò)Web UI的方式來(lái)啟動(dòng)、設(shè)置爬行參數(shù)并監(jiān)控爬行,其出色之處在于它的擴(kuò)展性,開(kāi)發(fā)者可以擴(kuò)展它的各個(gè)組件,來(lái)實(shí)現(xiàn)自己的抓取邏輯。雖然Heritrix功能強(qiáng)大,但其配置復(fù)雜,而且官方只在Linux系統(tǒng)上測(cè)試通過(guò),用戶難以上手,這也是本文將要解決的技術(shù)難點(diǎn)之一。
Heritrix采用了模塊化的設(shè)計(jì),用戶可以根據(jù)需要選擇使用的模塊。它主要由核心類(core classes)和插件模塊(pluggable modules)構(gòu)成。核心類可以配置,但不能被覆蓋,插件模塊可以由第三方模塊取代。所以就可以用實(shí)現(xiàn)了特定抓取邏輯的第三方模塊來(lái)取代默認(rèn)插件模塊,從而滿足自己特定的抓取需求。Heritrix的整體結(jié)構(gòu)如圖1所示。
圖1 Heritrix整體結(jié)構(gòu)
其中CrawlController(下載控制器)是整個(gè)下載過(guò)程的總控制者,整個(gè)抓取工作的啟動(dòng)者,決定整個(gè)抓取任務(wù)的開(kāi)始和結(jié)束。每個(gè)URI都有一個(gè)獨(dú)立的線程,它從邊界Frontier(控制器)獲取新的URI,然后傳遞給Processor chains(處理鏈)交由系統(tǒng)Processor(處理器)處理[5]。
1.2 檢索工具包Lucene
Lucene是一套用于全文檢索和搜尋的開(kāi)放源代碼,由Apache軟件基金會(huì)支持和提供[6]。Lucene提供了一個(gè)簡(jiǎn)單卻強(qiáng)大的應(yīng)用程式接口,能夠?qū)崿F(xiàn)全文索引和檢索,是目前最受歡迎的免費(fèi)java信息檢索程序。Lucene最初是由Doug Cutting開(kāi)發(fā)的,在SourceForge的網(wǎng)站上提供下載[7]。在2001年9月作為高質(zhì)量的開(kāi)源Java產(chǎn)品加入到Apache軟件基金會(huì)的 Jakarta家族中。隨著每個(gè)版本的發(fā)布,這個(gè)項(xiàng)目得到明顯的增強(qiáng),也吸引了更多的用戶和開(kāi)發(fā)人員。Lucene的各組件及工作如圖2所示。
圖2 Lucene的各組件及工作
Document對(duì)象代表被索引文檔,IndexWriter通過(guò)方法addDocument()將文檔添加到索引中,實(shí)現(xiàn)創(chuàng)建索引的過(guò)程。Lucene的索引時(shí)應(yīng)用反向索引。當(dāng)用戶有請(qǐng)求時(shí),Query代表用戶的查詢語(yǔ)句。IndexSearcher通過(guò)方法search()搜索Lucene Index。IndexSearcher計(jì)算term weight和score并且將結(jié)果返回給用戶。返回給用戶的文檔集合用TopDocsCollector表示。
本文設(shè)計(jì)開(kāi)發(fā)的專題搜索引擎具有以下四個(gè)技術(shù)創(chuàng)新點(diǎn):專題搜索引擎自動(dòng)運(yùn)行、摒棄Heritrix傳統(tǒng)的WebUI啟動(dòng)方式、網(wǎng)頁(yè)過(guò)濾、查詢結(jié)果排序算法改進(jìn)。
2.1 專題搜索引擎設(shè)計(jì)和自動(dòng)運(yùn)行
本文設(shè)計(jì)的專題搜索引擎包括爬取器(網(wǎng)絡(luò)爬蟲(chóng))、索引器、查詢器和控制中心四個(gè)模塊。四個(gè)模塊的運(yùn)行協(xié)作關(guān)系如圖3所示。
圖3 專題搜索引擎模塊運(yùn)行協(xié)作關(guān)系圖
爬取器主要負(fù)責(zé)網(wǎng)頁(yè)爬取,為索引器提供索引文檔;索引器負(fù)責(zé)對(duì)爬取的網(wǎng)頁(yè)建立倒排索引,供查詢器進(jìn)行搜索;查詢器負(fù)責(zé)用戶查詢;控制中心負(fù)責(zé)監(jiān)聽(tīng)爬取器、索引器和查詢器的運(yùn)行狀態(tài)以及根據(jù)專題配置信息啟動(dòng)爬取器或索引器,以實(shí)現(xiàn)專題搜索引擎的自動(dòng)爬取和數(shù)據(jù)更新。
為了保證搜索引擎的自動(dòng)運(yùn)行和各模塊間的協(xié)調(diào)工作,本文分別為爬取器、索引器和查詢器設(shè)定了兩種運(yùn)行狀態(tài),0表示空閑狀態(tài),1表示運(yùn)行狀態(tài)。
爬取器與索引器的運(yùn)行存在一定的順序,二者不能同時(shí)運(yùn)行,只有當(dāng)爬取器運(yùn)行完之后,才能運(yùn)行索引器,若網(wǎng)頁(yè)數(shù)據(jù)沒(méi)有下載更新,索引器是不能繼續(xù)運(yùn)行的。因此,需要為爬取器和索引器設(shè)定運(yùn)行狀態(tài),并在控制中心中設(shè)置監(jiān)聽(tīng)器,定時(shí)監(jiān)聽(tīng)二者的運(yùn)行狀態(tài),協(xié)調(diào)二者工作。另一個(gè)問(wèn)題是如何控制爬取器的自動(dòng)運(yùn)行,我們的解決方法是在數(shù)據(jù)庫(kù)中保存搜索引擎爬取時(shí)間間隔取值,這里爬取時(shí)間間隔取值是指從爬取器上一次爬取完到下一次開(kāi)始爬取之間的時(shí)間間隔。當(dāng)監(jiān)聽(tīng)器檢測(cè)到爬取器處于空閑(等待)狀態(tài)時(shí),且爬取器等待時(shí)間超過(guò)數(shù)據(jù)庫(kù)中設(shè)置的爬取時(shí)間間隔時(shí),控制中心會(huì)啟動(dòng)爬取器進(jìn)行網(wǎng)頁(yè)爬取。
2.2 摒棄Heritrix WebUI啟動(dòng)方式
Heritrix的WebUI啟動(dòng)方式雖然廣泛被開(kāi)發(fā)人員使用,但其配置繁瑣,不具備易用性。無(wú)法動(dòng)態(tài)設(shè)置爬取網(wǎng)站和爬取深度,不能自動(dòng)的持久運(yùn)行,對(duì)于普通用戶很難掌握并使用。本文摒棄Heritrix的WebUI啟動(dòng)方式,通過(guò)配置CrawlController類來(lái)啟動(dòng)抓取任務(wù)過(guò)。Heritrix啟動(dòng)核心代碼如下:
SystemInfoDao負(fù)責(zé)讀取專題的配置信息,比如爬取深度、種子鏈接等。HeritrixCrawlInfo負(fù)責(zé)保存每一次爬取任務(wù)的專題配置信息。當(dāng)然,相關(guān)的配置信息是提前保存在數(shù)據(jù)庫(kù)中的,為不同的專題提供不同的配置信息,避免了每次都要設(shè)置配置信息。
通過(guò)控制中心的協(xié)調(diào)以及摒棄Web UI啟動(dòng)方式,用戶只需要配置相關(guān)專題領(lǐng)域的信息就可以高效的檢索相關(guān)專題領(lǐng)域的信息,用戶不在需要關(guān)心搜索引擎的啟動(dòng)和運(yùn)行,方便了用戶的使用。
2.3 網(wǎng)頁(yè)過(guò)濾
當(dāng)使用Heritrix爬取網(wǎng)頁(yè)時(shí),磁盤上會(huì)存放大量的網(wǎng)頁(yè)文件,而且其中會(huì)有很多無(wú)用和冗余的網(wǎng)頁(yè)信息,占用大量的磁盤空間。通過(guò)網(wǎng)頁(yè)過(guò)濾,系統(tǒng)僅爬取與專題領(lǐng)域相關(guān)的網(wǎng)頁(yè),可以提高網(wǎng)頁(yè)爬取的準(zhǔn)確性和節(jié)省磁盤空間,即在網(wǎng)頁(yè)下載到本地磁盤之前,對(duì)網(wǎng)頁(yè)數(shù)據(jù)進(jìn)行挖掘分析。Heritrix在下載某一網(wǎng)頁(yè)或某一文檔之前,我們先對(duì)該網(wǎng)頁(yè)或文檔對(duì)應(yīng)的文本數(shù)據(jù)進(jìn)行信息分析,判斷是否包含相關(guān)專題領(lǐng)域的關(guān)鍵詞,當(dāng)然相關(guān)專題領(lǐng)域的關(guān)鍵詞事先存儲(chǔ)在數(shù)據(jù)庫(kù),由專業(yè)領(lǐng)域人員來(lái)設(shè)定。若該網(wǎng)頁(yè)或文檔包含相關(guān)專題領(lǐng)域信息,則下載該網(wǎng)頁(yè)或文檔,否則拋棄該網(wǎng)頁(yè)或文檔,繼續(xù)處理其它鏈接。
2.4 查詢結(jié)果排序算法設(shè)計(jì)
查詢結(jié)果排序算法實(shí)際是指文檔得分算法,為了提高查詢的準(zhǔn)確率,本文對(duì)文檔的得分算法進(jìn)行了改進(jìn)。通層次分析法(AHP),為相關(guān)專題領(lǐng)域關(guān)鍵詞設(shè)定權(quán)重(用weight表示),通過(guò)設(shè)定關(guān)鍵詞權(quán)重,更能體現(xiàn)專題領(lǐng)域信息的專業(yè)性。當(dāng)同一信息在多個(gè)網(wǎng)頁(yè)或網(wǎng)站被轉(zhuǎn)載或發(fā)表時(shí),從側(cè)面反映出其存在較高的價(jià)值和實(shí)用性。因此,本文在排序算法中引入了一項(xiàng)評(píng)估指標(biāo)—網(wǎng)頁(yè)信息重復(fù)率(用pac表示),網(wǎng)頁(yè)信息重復(fù)率的權(quán)重通過(guò)德?tīng)柗品?Delphi)來(lái)獲取,同樣我們引入傳播范圍這一評(píng)估指標(biāo),傳播范圍(用ptc表示)在本文中代表同一信息出現(xiàn)在多少不同的網(wǎng)站上,當(dāng)然其權(quán)重同樣是通過(guò)德?tīng)柗品?Delphi)來(lái)獲取。
本文將文檔的最后的得分劃分為兩部分:Lucene原始文檔得分和引進(jìn)評(píng)估指標(biāo)算法得分,兩部分得分之和為文檔的最后得分。Lucene的文檔得分算法,具體公式如下:2.0[M].人民郵電出版社,2007.
tf的全稱為Term Frequency,也就是詞條頻率的一次。idf的全稱為Inversed Document Frequency,它表示反轉(zhuǎn)文檔頻率。Boost指在建立索引時(shí),對(duì)每個(gè)Field設(shè)置的一種激勵(lì)因子[8]。
引進(jìn)評(píng)估指標(biāo)算法得分算法,具體得分計(jì)算如下:
兩部分得分之后即為文檔得分,查詢結(jié)果按照文檔得分的高低顯示,當(dāng)然文檔內(nèi)容重復(fù)率達(dá)到規(guī)定取值時(shí),取文檔得分較高者顯示。最終通過(guò)引入新的得分算法,在一定程度上既能提高了查詢的準(zhǔn)確率又能降低了查詢結(jié)果的重復(fù)率。
2.5 搜索引擎應(yīng)用
本文設(shè)計(jì)開(kāi)發(fā)的搜索引擎已被成功的應(yīng)用到一涉腐輿情預(yù)警系統(tǒng)中。搜索引擎查詢結(jié)果界面如圖4所示。
圖4 搜索引擎查詢結(jié)果界面
本文通過(guò)將Heritrix和Lucene進(jìn)行有效的結(jié)合,構(gòu)建成一個(gè)完整的搜索引擎。并通過(guò)對(duì)源碼的修改和封裝實(shí)現(xiàn)了專題搜索引擎的自動(dòng)運(yùn)行,用戶只需配置相應(yīng)的專題信息即可使用其檢索功能,無(wú)需進(jìn)行繁瑣的配置和關(guān)心搜索引擎的運(yùn)行。本文的主要?jiǎng)?chuàng)新點(diǎn)有專題搜索引擎的自動(dòng)運(yùn)行,易于普通用戶的使用,提高了易用性;摒棄Heritrix的傳統(tǒng)用法,避免了繁瑣的配置過(guò)程;進(jìn)行網(wǎng)頁(yè)過(guò)濾,避免爬取大量無(wú)用的和冗余的網(wǎng)頁(yè)信息,節(jié)省了磁盤空間;改進(jìn)文檔得分算法,提高查詢的準(zhǔn)確率和在一定程度上實(shí)現(xiàn)了檢索去重。
[1]http://zh.wikipedia.org/wiki/%E6%90%9C%E7 %B4%A2%E5%BC%95%E6%93%8E
[2]李世明,趙恒永.專題搜索引擎研究與實(shí)現(xiàn)[J].電子科學(xué)技術(shù)評(píng)論,2005.
[3]高偉峰.基于Heritrix的主題網(wǎng)絡(luò)爬蟲(chóng)設(shè)計(jì)與實(shí)現(xiàn)[J].南寧職業(yè)技術(shù)學(xué)院,2011.
[4]孟祥成.基于Lucene和Heritrix技術(shù)搜索引擎的設(shè)計(jì)與實(shí)現(xiàn)[J].中國(guó)現(xiàn)代教育裝備,2010.
[5]http://www.chineselinuxuniversity.net/ articles/40890.shtml
[6]白坤,耿國(guó)華.基于Lucene/Heritrix的垂直搜索引擎的研究與應(yīng)用[J].計(jì)算機(jī)應(yīng)用與軟件,2009.
[7]Erik Hatcher,Otis Gospodetic,Lucene In Action [M]. Manning Publications Co.2005.
[8]邱哲,符滔滔.開(kāi)發(fā)自己的搜搜引擎Lucene
Research on the topical search engine based on Heritrix and Lucene
JIA Chao WEI Wen-xue
College of Information Science & Engineering , Shandong University of Science & Technology , Qingdao Shandong 266590 , China
thematic search engine, also known as vertical search engines, mainly used to meet specific user needs. Heritrix is an open source Web crawler Heritrix the WebUI start way is not easy for the majority of users. Changed the usual Heritrix usage abandon the way of the Heritrix of WebUI start Heritrix source code be modified to integrate Lucene into Heritrix build into a complete search engine, and through the listener to monitor the status of the search engine, search engines can automatic crawling and data updates. Meanwhile, the paper added Web filtering module, and query results sorting algorithm has been improved, easyto-use search engine and query accuracy.
TP393
A
10.3969/j.issn.1001-8972.2012.10.050
賈超(1989-),男,山東泰安人, 碩士研究生,主要研究方向?yàn)檐浖こ?/p>