

【摘要】根據特定的主題用戶的應用需求,深入研究主題搜索引擎的組織與結構,并結合實際情況,對主題信息收集模塊進行設計。
【關鍵詞】Nutch檢索搜索引擎
【文獻編碼】 doi:10.3969/j.issn.0450-9889(C).2011.06.051
從2009年開始,搜索引擎進入新一輪的快速發展時期。2010年上半年,一方面,搜索引擎用戶規模和滲透率持續增長;另一方面,用戶使用搜索引擎的頻率增加,生活中各種信息的獲取更多地訴求于互聯網和搜索引擎。搜索引擎界掀起了一場看不見的硝煙的戰爭,人們希望搜索引擎能夠更加精確的返回所需的信息,主題搜索引擎成為了未來搜索引擎發展的趨勢。目前,每年都有幾百萬的高校應屆畢業生畢業,教育部公布2010年全國高校應屆畢業生人數達到630萬人。應屆生畢業生都希望能夠搜集許多的招聘信息以便盡快地找到合適自己的工作崗位,為此,開發一個面向招聘信息的主題搜索引擎是非常有意義的。
一、Nutch簡介
本系統的設計是在Nutch上進行二次開發與設計的。Nutch是一個完整的Java應用系統,是基于Lucene的完整的搜索引擎。Nutch開放源碼,方便程序員通過對源碼的修改,對Nutch進行重新發布,通過Tomcat等Web服務器可以進行檢索。
二、 系統功能分析
(一) 系統功能需求分析
面向招聘信息的主題搜索可以為需要找工作的信息檢索用戶提供面向招聘信息、崗位需求等方面的檢索功能,與百度和谷歌的區別在于能夠快速的返回給檢索用戶更精確的信息。
要實現一個專題的搜索引擎,只需要在通用搜索引擎的基礎上,針對某一個領域的主題資源進行處理,主要的用戶功能需求如圖1所示。
(二) 設計目標
招聘信息主題搜索系統的設計目標:其一,本系統的為了符合主題用戶的實際需要,為用戶收集各類招聘信息及各類崗位信息,其中包括用戶最關心的公司名稱、工作地點、薪金待遇、聯系方式等。其二,系統的開發是面向招聘信息這一特定的主題,相對于通用搜索引擎返回的結果更精確、更集中、更快速,引入中文分詞技術,設計一個中文分詞器,提高Nutch原有的分詞器的分詞準確率。其三,為用戶提供友好的交互界面,操作簡單方便。
三、 招聘信息主題搜索引擎的系統總體設計
主題搜索引擎與通用搜索引擎的工作原理基本相同,因此,本系統的設計就是以通用搜索引擎為基本架構,在網絡上通過信息抓取模塊將與招聘信息相關的內容進行收集,信息提取模塊將收集到的信息進行內容的提取并交給中文分詞模塊進行分詞后存儲,由索引模塊進行索引后保存在索引數據庫中,用戶可以通過向檢索模塊提交查詢請求后,在索引數據庫中檢索得到相應的結果,并將結果返回給用戶。系統的總體結構如圖2示。
根據系統的總體設計結構,系統在設定的一定時間間隔內定期在網絡上抓取網頁中的有效信息;對抓取得到的網頁信息進行分詞處理,建立索引,存入索引數據庫;系統在接收用戶的查詢請求后,對查詢語句進行分詞處理,與索引數據庫中的索引數據進行匹配,將得到的匹配信息提取排序后,以結果頁面的形式返回給用戶。
四、 主題信息抓取模塊的設計
(一) 主題信息抓取的設計目標及流程
主題爬蟲在網絡上搜集網絡資源是有針對性,在對信息進行采集完成后,經過分析、提取等處理后,交給索引模塊進行索引,最后用戶可以通過檢索模塊進行相關的查詢檢索,這是主題搜索引擎的整個工作流程,在這一過程中,主題爬蟲將影響整個主題搜索引擎的性能。主題爬蟲的工作流程如圖3所示。
主題爬蟲的工作流程是,首先從初始種子站點中開始進行信息的采集,對獲取的網頁的頁面進行分析和處理,提取其中的URL,判斷獲取的網頁的頁面及URL與主題的相關度,如果滿足某一個停止的條件則停止采集任務,如果沒有滿足則繼續根據某種搜索策略選擇優先級高的URL繼續進行信息的采集。主題爬蟲的任務就是盡可能多的采集與主題相關度的頁面,以此來保證系統對主題的覆蓋率,因此,主題爬蟲的設計主要從以下兩個方面進行考慮:
1. 下載與主題相關的網頁。對于主題搜索引擎來說,在用戶向系統提交查詢請求后,返回給用戶的信息應盡量的滿足用戶的需求,而不是返回大量的無用信息。因此,主題爬蟲的任務不是去盡可能多的收集互聯網上的信息,而是盡可能的下載與主題相關的網頁。
2. 決定主題爬蟲的搜索策略。主題爬蟲在訪問URL的過程中與通用搜索引擎的爬蟲不同,通用搜索引擎的爬蟲對于URL的訪問不需考慮爬取的頁面是否與主題相關,只考慮盡可能多的下載頁面,從而完成對海量信息的收集。主題爬蟲爬取的目標是有針對性的,在訪問URL收集信息的過程中,需要考慮待爬行的頁面與主題的相關度,并根據與主題的相關程度來決定爬行URL的爬行次序。
主題爬蟲的目標是完成主題信息的收集,其設計是在通用搜索引擎上的爬蟲進行功能擴充的。主題信息抓取流程設計如圖4所示。
本系統要設計和實現的是一個面向招聘信息的主題搜索引擎,在信息抓取模塊中首先提供關鍵詞表和網站集合,由主題爬蟲根據初始種子站點獲取信息,然后再交由主題過濾模塊進行過濾。
(二) 初始種子URL 的選取與設定
主題蜘蛛出發進行主題信息的收集時一般是按照給定的初始種子的站點作為入口地址,初始種子站點的選擇將直接影響信息采集的結果。在對種子站點進行選取時,盡量選擇主題范圍內具有較高權威性的網站,確保主題爬蟲從這些站點集合出發能收集到與旅游主題相關度高的主題資源。
本搜索引擎的初始種子URL的選擇使用混合模式,即人工指定與自動生成相結合。首先利用簡單的元搜索的策略在百度上獲得一定的鏈接地址,并經過人工的篩選,過濾等,提取一定的鏈接地址,通過對地址的分析,可以得到這些地址的上級目錄或者網站然后再加入知名的招聘網站。
元搜索策略的實現主要通過HTMLParser來完成。HTMLParser是一款功能強大的HTML解析器,處理速度快,是目前比較流行的解析器。它是一個解析Web頁面的純Java開源類庫,主要用于分析HTML格式的Web頁面,完成內容的提取。使用HTMLParser進行鏈接抽取非常有效,能夠快速的提取網頁中的鏈接地址。
下面給出利用HTMLParser在百度上提取鏈接的部分代碼:
public static void main (String[] args) throws ParserException
{
try {
TravelWordTable(\"關鍵詞表\");
} catch(Exception e)
{
e.printStackTrace();
}
}//從關鍵詞文件中讀取主題關鍵字,進行元搜索
……
public static void TravelWordTable(String filename) throws IOException
{
try{
String buffer ;
FileWriter resultFile = 1;
PrintWriter myFile = 1;
String dstfile = filename+ \"_dsturl.txt\" ;
File writefile = new File(dstfile);
if(!writefile.exists())
{
writefile.createNewFile();
}
resultFile=new FileWriter(writefile);
myFile = new PrintWriter(resultFile);
BufferedReader reader = new BufferedReader(new FileReader(filename);
while((buffer = reader.readLine())!=1)
{
String url = \"http://www.baidu.com/s?lm=0si=rn=10ie=gb2312ct=0wd=\" + buffer + \"pn=0ver=0cl=3\";
getBaiduUrls(url,\"GB2312\",myFile);
}
……
}
種子站點建立完成后,仍需要定期對種子庫進行維護和更新。
五、 中文分詞模塊的設計
為了讓系統實現對中文的詞的正確切分,提高主題搜索引擎的搜索精度,系統采用JE分詞軟件來實現。
JE Analysis基本特點有支持英文、數字、中文(簡體)混合分詞;有超過22萬詞的詞庫整理;還提供了API,增加了詞典的動態擴展能力、整理優化了詞庫,全面支持Lucene;可以設定正向最大匹配字數。其分詞效率達到每秒30萬字。JE分詞是基于詞庫分詞的。詞庫分詞是根據某一個詞典,按照某種算法在詞典中尋找匹配的單詞,當在詞典中尋找到符合的詞,便將其切分出來。
JE分詞所采用的算法就是MM法。其基本思想為:設D為詞典,M表示詞典D中的最長的詞條的長度,str為待切分的句子。MM算法是每次從待切分的str中取長度為M的字符串與詞典D中的詞條進匹配。若匹配成功,則該字符串為詞,指針后移M個字符后繼續提取M個長度的字符串繼續與詞典D進行匹配;如果匹配未成功,則將進行匹配的字符串減掉最后一個字,然后繼續進行匹配,直至字符串全部匹配成功或句子為空。
【參考文獻】
[1]周鵬,吳華瑞,趙春江等.基于Nutch農業搜索引擎的研究與設計[J].計算機工程與設計,2009(3)
[2]曹建芳,王鴻斌.基于SVM和統計的搜索引擎的設計[J].計算機工程與設計,2007 (9)
[3]汪濤,樊孝忠.主題爬蟲的設計與實現[J].計算機應用,2004(19)
【作者簡介】 付光,遼寧岫巖人,廣西工商職業技術學院副教授,研究方向:電子信息技術、計算機應用技術。