摘要:垂直搜索是針對某一個(gè)行業(yè)的專業(yè)搜索引擎,是搜索引擎的細(xì)分和延伸,是對網(wǎng)頁庫中的某類專門的信息進(jìn)行一次整合,定向分字段抽取出需要的數(shù)據(jù)進(jìn)行處理后再以某種形式返回給用戶。該文結(jié)合使用Heritrix與Lucene對學(xué)校新聞網(wǎng)站網(wǎng)頁進(jìn)行抓取并建立索引,建立相對應(yīng)的新聞垂直搜索引擎系統(tǒng)。
關(guān)鍵詞:垂直搜索;Heritrix;Lucene;中文分詞;搜索引擎
中圖分類號:TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號:1009-3044(2008)29-0350-03
Research on the Vertical Search Engine Based on Heritrix and Lucene
ZHENG Ru-bin1, SA Li1, XIE Ting2
(1.Computer Science Engineering College,Jimei University,Xiamen 361021,China;2.Chengyi College,Jimei University,Xiamen 361021,China)
Abstract: Vertical search engine focuses on some special fields. It’s an extension and subdivision of search engine. It can integrate and extract the user-preferred information resided in the collection of web pages and return the more readable search results to the users. This paper constructs a news vertical search engine system which adopts the Heritrix and Lucene.
Key words: vertical search engine; heritrix; lucene; Chinese word segmentation; search engine
1 引言
隨著互聯(lián)網(wǎng)的迅猛發(fā)展, 各式各樣的網(wǎng)站數(shù)量急劇增加,互聯(lián)網(wǎng)上的信息的也呈指數(shù)級增長。如何使用戶迅速地從互聯(lián)網(wǎng)上查找到自己所需要的信息成為了一個(gè)研究的熱點(diǎn)。在這樣的背景下,Yahoo、Google、Baidu等公司逐漸加入搜索引擎市場。而傳統(tǒng)的搜索引擎是通用搜索引擎,其所呈現(xiàn)給用戶的檢索結(jié)果是非結(jié)構(gòu)化的網(wǎng)頁信息摘要,這種非結(jié)構(gòu)化的網(wǎng)頁信息信息量大,但查詢不準(zhǔn)確、深度不夠。垂直搜索引擎(Vertical Search Engine)是針對某一個(gè)領(lǐng)域的信息,為特定用戶提供一種專業(yè)、精確、深入的檢索與呈現(xiàn)。它所呈現(xiàn)給用戶的搜索結(jié)果的范圍是經(jīng)過篩選的、限定范圍的,具有一定的行業(yè)色彩,相較通用搜索引擎的無序化搜索結(jié)果,垂直搜索引擎可以給用戶以更準(zhǔn)確的、結(jié)構(gòu)化的結(jié)果。常見的垂直搜索引擎有酷訊(kooxoo.com)的火車票搜索,搜房(soufun.com)的房屋搜索。本文主要討論如何利用Heritrix與Lucene構(gòu)建一個(gè)新聞垂直搜索引擎系統(tǒng),使用戶可以充分享受垂直搜索引擎技術(shù)所帶來的好處。
2 垂直搜索引擎關(guān)鍵技術(shù)
垂直搜索引擎系統(tǒng)主要是由以下幾項(xiàng)技術(shù)構(gòu)成,網(wǎng)頁爬蟲(Web Crawler)、網(wǎng)頁信息抽取(Web Information Retrieval)、中文分詞(Chinese word segmentation)、建立與搜索索引(Index)。網(wǎng)頁爬蟲通過指定的種子(Seeds),沿著頁面中所包含的鏈接不斷的將網(wǎng)頁抓取下來。對抓取下來的網(wǎng)頁的內(nèi)容進(jìn)行分析,可以確定所需要抽取的結(jié)構(gòu)化信息,然后將網(wǎng)頁內(nèi)容解析成格式化的信息。最后對這些已經(jīng)格式化的信息,通過中文分詞建立索引。搜索時(shí),就可以通過快速檢索索引找到關(guān)鍵詞所對應(yīng)的結(jié)構(gòu)化信息。見圖1。
2.1 網(wǎng)絡(luò)爬蟲
網(wǎng)絡(luò)爬蟲也被稱為網(wǎng)絡(luò)蜘蛛(Spider)或者是網(wǎng)絡(luò)機(jī)器人,它是一個(gè)自動(dòng)抓取網(wǎng)頁的程序,是搜索引擎的重要組成部分。網(wǎng)絡(luò)爬蟲將一個(gè)或者若干個(gè)初始URL作為種子,不斷的抓取頁面中符合條件的新的URL所指向的頁面。當(dāng)滿足一定停止條件時(shí),網(wǎng)絡(luò)爬蟲終止運(yùn)行。
常見的網(wǎng)絡(luò)爬蟲有Larbin與Heritrix。Larbin由法國的年輕人 Sébastien Ailleret 獨(dú)立開發(fā),一個(gè)簡單的larbin的爬蟲可以每天抓取500萬的網(wǎng)頁。我們的系統(tǒng)中使用的則是Heritrix爬蟲。它是一個(gè)由Java開發(fā)的、開源的Web網(wǎng)絡(luò)爬蟲項(xiàng)目。其最出色之處在于它的可擴(kuò)展性,開發(fā)者可以擴(kuò)展它的各個(gè)組件,來實(shí)現(xiàn)自己的抓取邏輯。
2.2 網(wǎng)頁信息抽取
網(wǎng)絡(luò)爬蟲所抓取的內(nèi)容是無結(jié)構(gòu)化的網(wǎng)頁。構(gòu)建垂直搜索引擎,需要將網(wǎng)頁中的非結(jié)構(gòu)化的數(shù)據(jù)按照一定的需求抽取出來,形成結(jié)構(gòu)化的數(shù)據(jù)。這是垂直搜索引擎與通用搜索引擎的一大差別。
系統(tǒng)結(jié)合正則表達(dá)式和HTMLParser將網(wǎng)頁解析為格式化的文本。一般的網(wǎng)頁文件是由元素組成(element)。絕大多數(shù)元素是以一個(gè)起始標(biāo)記開始,一個(gè)結(jié)尾標(biāo)記結(jié)束,起始標(biāo)記和結(jié)尾標(biāo)記之間的部分是元素體。每一個(gè)元素都有名稱和一些可選的屬性,這些都在起始標(biāo)記內(nèi)表明。如 是起始與結(jié)尾標(biāo)記,他們之間的部分是HTML元素體。而正則表達(dá)式是功能強(qiáng)大的文本分析工具,結(jié)合上面所描述的網(wǎng)頁文件的特征,我們可以利用正則表達(dá)式提取HTML文本。但僅僅使用正則表達(dá)式提取文本,需要考慮很多細(xì)節(jié),通用性不強(qiáng),所以我們結(jié)合HTMLParser來提取網(wǎng)頁信息。HTMLParser是一個(gè)開源的Java庫,它提供接口,支持線形和嵌套的解析HTML文本。解析文本的最好方法就是結(jié)合正則表達(dá)式與HTMLParser。
按照用戶的需求,我們結(jié)合使用正則表達(dá)式與HTMLParser從網(wǎng)頁中抽取需要的信息,并形成結(jié)構(gòu)化的文本,以供后續(xù)處理。
2.3 中文分詞與全文索引
對于結(jié)構(gòu)化的文本,可以使用Lucene建立索引以供快速查找。Lucene是一個(gè)用Java寫的全文索引引擎工具包,它可以方便的嵌入到各種應(yīng)用中實(shí)現(xiàn)針對應(yīng)用的全文索引/檢索功能。它使用一種倒排的技術(shù),倒排是一種面向單詞的索引機(jī)制,通常它由詞(關(guān)鍵字)和出現(xiàn)情況兩部分組成。對索引中的每個(gè)詞,都跟隨一個(gè)列表(位置表)用來記錄單詞在所有文檔中出現(xiàn)的位置。當(dāng)搜索索引的時(shí)候,通過關(guān)鍵詞就可以迅速找到該關(guān)鍵詞在所有文章中出現(xiàn)的位置。
倒排技術(shù)的一個(gè)關(guān)鍵之處在于確定關(guān)鍵詞,然而Lucene本身并不能很好的支持中文分詞,這就導(dǎo)致了Lucene并不能很好的處理中文網(wǎng)頁。常見的分詞有中科院的ICTCLAS分詞與JE分詞。系統(tǒng)中我們采用了JE分詞來進(jìn)行中文分詞。
3 新聞垂直搜索引擎系統(tǒng)的設(shè)計(jì)
學(xué)校新聞搜索引擎系統(tǒng)是一個(gè)針對學(xué)校新聞網(wǎng)站的新聞進(jìn)行垂直搜索的系統(tǒng)。該系統(tǒng)主要由網(wǎng)頁抓取模塊、信息抽取與結(jié)構(gòu)化模塊、分詞建立索引模塊、后臺(tái)存儲(chǔ)模塊與信息展示模塊構(gòu)成。見圖2。
3.1 網(wǎng)頁抓取模塊
網(wǎng)頁抓取模塊負(fù)責(zé)從學(xué)校的新聞網(wǎng)站抓取符合條件的新聞頁面,這部分主要采用Heritrix實(shí)現(xiàn)。在該模塊中,我們需要給出頁面抓取的起始URL作為Heritrix種子。種子的選擇,必須可以使得Heritrix不漏掉新聞中心中的所有新聞。經(jīng)分析,我們采用新聞中心頁面URL鏈接http://chengyi.jmu.edu.cn/news/index.asp?typeid=21。但使用該URL作為起始種子總是會(huì)保存大量與新聞無關(guān)的頁面,因此我們需要擴(kuò)展Heritrix,加入一種URL選擇策略把不需要的URL過濾掉。這里我們可以擴(kuò)展Heritrix中的FrontierSchedular來達(dá)到要求。部分代碼如下:
if (url.indexOf(\"chengyi.jmu.edu.cn/news/\")!= -1 || url.indexOf(\"robots.txt\")!= -1
|| url.indexOf(\"dns:\") != -1 ) getController().getFrontier().schedule(caUri);
代碼中,chengyi.jmu.edu.cn/news/為新聞信息頁面的URL的前綴,因此,肯定需要讓其通過約束,以使得新聞的詳細(xì)信息頁面能夠得以保存。
最后符合條件的相關(guān)新聞網(wǎng)頁抓取下來。
3.2 信息抽取與結(jié)構(gòu)化模塊
該模塊是區(qū)別于垂直搜索與通用搜索的一個(gè)重要模塊,其主要負(fù)責(zé)對抓取下來的網(wǎng)頁中的所需要的數(shù)據(jù)進(jìn)行抽取與結(jié)構(gòu)化。經(jīng)分析,一個(gè)新聞頁面應(yīng)包含幾個(gè)字段:原網(wǎng)頁的URL地址、新聞的標(biāo)題、新聞的發(fā)布日期、新聞的出處、新聞的作者、新聞的正文內(nèi)容。我們設(shè)計(jì)新聞信息抽取類ExtractorNews,該類繼承自HTMLParser中的基類Extractor,實(shí)現(xiàn)了其extract方法,通過結(jié)合正則表達(dá)式與HTMLParser最終將網(wǎng)頁中的新聞信息,按照上面分析的幾個(gè)字段抽取出來,并存儲(chǔ)在各個(gè)不同的文本文件中,以供后續(xù)處理。
3.3 分詞建立索引模塊
該模塊負(fù)責(zé)對生成的文本文件進(jìn)行中文分詞并建立索引。這部分主要采用JE分詞作為種分詞組件,Lucene作為全文索引模塊。
這個(gè)部分首先要添加一些專用詞庫。JE本身已經(jīng)有一個(gè)標(biāo)準(zhǔn)詞庫,但由于名字及一些專有名詞的特殊性,這個(gè)標(biāo)準(zhǔn)詞庫可能不包含一些特殊名詞。我們可以根據(jù)學(xué)院的具體情況,創(chuàng)建一個(gè)包含學(xué)校學(xué)院名稱、在校人員姓名這樣的詞庫,可以使得分詞更精確、準(zhǔn)確。
在建立索引方面,因?yàn)榭紤]到搜索的時(shí)候可能需要對多個(gè)不同的部分進(jìn)行搜索,如對作者姓名搜索、對正文內(nèi)容搜索,那么我們應(yīng)該對不同的部分使用不同的分析器才能達(dá)到更好的效果。如對作者的姓名,直接采用Lucene中的StandardAnalyzer分析器,而對正文內(nèi)容則應(yīng)該采用JE的中文分析器(MMAnalyzer)。最后,使用Lucene中的PerFieldAnlyzerWrapper來對文檔中的多個(gè)部分結(jié)合使用不同的分析器。
3.4 后臺(tái)存儲(chǔ)模塊
該模塊負(fù)責(zé)將格式化后的新聞文本文件存儲(chǔ)起來到后臺(tái)的SQL server數(shù)據(jù)庫中,并在存儲(chǔ)的同時(shí)調(diào)用分詞建立索引模塊對新聞內(nèi)容的各部分建立索引。
3.5 信息展示模塊
信息展示模塊主要是使用Tomcat搭建一個(gè)Web平臺(tái),給用戶提供搜索界面,同時(shí)使用用戶所提交的關(guān)鍵詞調(diào)用搜索服務(wù),同時(shí)搜索文章作者、文章標(biāo)題與文章正文內(nèi)容三個(gè)部分得索引,并將所對應(yīng)的結(jié)果返回給用戶。搜索界面如圖3所示。
4 結(jié)束語
垂直搜索引擎給市未來搜索引擎技術(shù)發(fā)展的一個(gè)重要方向。可以預(yù)見,其給用戶帶來的將是更準(zhǔn)確、更有效的信息。本文通過Heritrix與Lucene構(gòu)建了一個(gè)針對學(xué)校新聞網(wǎng)站的一個(gè)垂直搜索引擎,為用戶提供了更好的搜索新聞的體驗(yàn)。
參考文獻(xiàn):
[1] 邱哲,符滔滔.開發(fā)自己的搜索引擎—Lucene 2.0+Heritrix[M].北京:人民郵電出版社,2007.
[2] Gospodnetic O,Hatcher E.Lucene IN ACTION中文版[M].北京:電子工業(yè)出版社,2007.
[3] Heritrix for the Web Lab: a Tutorial[EB/OL].http://weblab.tc.cornell.edu/tools_amazon/heritrixweblab_docs.aspx.
[4] 什么是垂直搜索?[EB/OL].http://www.fullsearcher.com/n20051112144420735.asp.
[5] 走進(jìn)搜索引擎[M].北京:電子工業(yè)出版社,2007.
[6] 搜索引擎原理、實(shí)踐與應(yīng)用[M].北京:電子工業(yè)出版社,2007.