摘要:在介紹了搜索引擎基本原理和構架的基礎上,提出了一種整合Larbin、Lucene、ICATLAS等多種開源工具快速構建小型搜索引擎的實驗方案。實驗表明,該引擎能有效完成網頁的采集、處理、索引和檢索等工作。
關鍵詞:搜索引擎;開源工具;信息檢索
中圖分類號:TP393文獻標識碼:A文章編號:1009-3044(2008)05-10ppp-0c
1 引言
隨著Internet的快速發展和廣泛應用,網絡為用戶提供了豐富的資源,搜索引擎已成為互聯網最重要的應用之一。我們既需要像google、baidu這樣的大型搜索引擎,同時,構建小規模的、針對某些特定領域的垂直搜索引擎對用戶更有針對性、更精確地獲得搜索結果也很有意義。這類搜索引擎由于規模小,因此具有投資較少、構建快速簡單的要求。我們可以無需“白手起家”,僅借助網上開源工具進行整合與二次開發就可以快速高效地構建起一個小型的搜索引擎。
本文在介紹了搜索引擎基本原理和構架的基礎上,提出了一種整合Larbin、Lucene、ICATLAS等多種開源工具快速構建小型搜索引擎的實驗方案。該系統能有效完成小規模網頁的采集、處理、索引和檢索等工作??梢宰鳛橐粋€實用性的垂直搜索引擎,也可以在實驗室中供教學科研使用。下文共分3部分,首先在介紹了搜索引擎各部分在不同平臺下可供選擇的多種開源工具,然后介紹了實驗方案的具體實現過程,最后對工作做了總結。
2 開源工具介紹
搜索引擎大致包含網頁的采集、頁面的分析、信息的檢索三個主要步驟[5],涉及到采集器、分析器、檢索器三種核心技術,此外還需設計接口方便用戶查詢。
2.1 采集器
信息的采集主要是通過Web頁面之間的鏈接關系??梢园丫W頁集合看成一個有向圖,沿著鏈接不斷向所需要的頁面擴展,下載相應的網頁[5]。由于整個過程像一個蜘蛛在網上爬行,通常我們把這種網頁采集器形象地稱為“網絡蜘蛛”或“網絡機器人”。
通常大型搜索引擎的采集器針對網上全部URL,而小型垂直搜索引擎一般只針對特定的某些網站,它的URL規模有限,因此它的采集器較為簡單,對遍歷算法、抓取效率等沒有過高要求。
2.1.1 Larbin
Larbin是一個全功能的網頁爬蟲,由法國人 Sebastien Ailleret開發,適用于Linux/FreeBSD平臺,目前版本為2.6.3。Larbin可以從網上免費下載,遵守GPL協議。一個簡單的larbin的爬蟲在標準PC機上大約每天可以獲取500萬個網頁[2]。
Larbin的使用方法將于3節詳細介紹。
2.1.2 Offline Explorer
Offline Explorer由Metaproducts公司推出,適用于Windows平臺,目前版本為4.9。它是一個共享軟件,可以下載試用版。除網頁外還可以抓取圖像、音頻、視頻等。
這是一個Windows界面的程序,安裝簡單,使用時首先通過“工具”菜單下“選項”對話框設置連接數(最多可以100個線程同時下載)、超時時間、下載間延時等參數。然后按“向導”對話框的引導設置項目,主要需確定項目URL(即初始地址)、名稱、級別限制(即采集深度)、文件類型(可以設置抓取全部文件,也可跳過視頻、音頻、圖像等類型)、下載文件位置(設置爬蟲能抓取其他位置或僅裝入初始URL/服務器,如在垂直搜索引擎中只需抓取一個網站的內容即應在此設置),至此即可開始采集。另外文件類型過濾、URL過濾、內容過濾等詳細設置可以在“屬性”中完成。
2.2 分析器
分析器涉及的工作主要有兩類:類型轉換和中文分詞。
類型轉換主要是將抓取的文件中的內容提取出來,變為文本文件,方便后續搜索功能的實現。文件類型主要有html、PDF、Word、Excel等。
文件類型轉換后,還需要對內容提取代表性的特征支持以后的查詢,因此作為分析器的另一個基本任務是要從網頁內容部分提取關鍵字。對于中文來說,沒有類似英文的分詞標記,因此對于文本還需要首先進行分詞才能夠在后繼工作中建立索引。
2.2.1 Html
我們的工作主要是去除Html頁面中的代碼部分。這可以通過簡單的程序實現,也可以借助現成軟件完成。常見的軟件有HTML2TXT。
HTML2TXT是一個免費軟件,適用于Windows平臺。支持文件的批量轉換,方便大規模處理抓取的文件,同時它不僅可以將HTML文件轉換為TXT格式,而且可以格式化文本,方便后續處理。
2.2.2 PDF
主要將PDF文件變為TXT文件。常見的軟件有PDF2TXT、Solid Converter,它們均運行于Windows平臺下。
PDF2TXT不但完全支持英文PDF文檔的轉換,對PDF的版面信息可以完全保留,而且支持所有的PDF文檔格式。該軟件功能強大,使用方便。缺點是對中文支持不好。
Solid Converter支持中文的轉換,可以批量處理PDF文件向TXT的轉換。
2.2.3 Office
Office中常用文件類型有DOC、XLS。
在Linux系統中WvWare可以完成由DOC向TXT的轉換,命令為wvText --charset=gb2312 1.doc 1.txt。在Windows系統中,可以使用“DOC批量轉TXT”軟件。
Total Excel Converter 1.3運行于Windows平臺下,它不但支持批量Excel文件向文本文件的轉換,而且還可以在命令行下轉換或通過其他程序來調用。
2.2.4 中文分詞
目前搜索引擎中常用的分詞軟件有ICATLAS和海量智能分詞兩種。
ICATLAS是由中國科學院計算技術研究所研制出的漢語詞法分析系統,包含了中文分詞、詞性標注、命名實體識別、新詞識別等功能,同時它支持用戶詞典。目前版本為3.0,分詞速度單機996KB/s,分詞精度98.45%。
ICTCLAS全部采用C/C++編寫,支持Linux、FreeBSD及Windows系列操作系統,提供了API;支持C/C++/C#/Delphi/Java等主流的開發語言,只需簡單配置即可在程序中進行調用;能嵌入到Lucene中。
海量智能分詞是由海量信息技術有限公司推出的便于二次開發的軟件包,包含了歧義識別、未登錄詞識別、關鍵詞標注、用戶自定義詞典、詞性標注等功能。切分準確率達99.7%,速度達到2000萬字/分鐘。支持多平臺,多碼制,多線程。
海量智能分詞在VC++6.0下開發,支持Windows。和ICATLAS類似,它也提供了C/C++開發接口。
2.3 檢索器
檢索器的工作分為建立索引表和檢索兩部分。
建立索引表的過程為:在分析網頁并把正文信息切分為索引后,得到以網頁編號為主鍵的正向索引表。之后對該表進行重組,將相同索引詞對應的數據合并到一起,得到以索引詞為主鍵的索引表,也叫做倒排文件索引[5]。之后就可以對索引進行檢索了。
常用的索引器有Lucene和FirteX兩種。
2.3.1 Lucene
Lucene是由資深全文索引/檢索專家Doug Cutting開發的一個基于 Java 的完整、高效、易用的全文索引引擎工具包,具有可擴展的IR庫。目前的版本為2.3.0??梢苑奖愕厍度氲礁鞣N應用中實現全文索引/檢索功能。主要有結果排序、查詢表達式處理功能、分字段檢索、根據字段排序、多索引檢索與結果合并等功能[1]。
Lucene的使用方法將于3節詳細介紹。
另外Clucene是C++版的全文檢索引擎,完全移植于Lucene。
2.3.2 FirteX
FirteX是中國科學院計算技術研究所采用C++開發的一個功能強大、性能較高的全文索引和檢索平臺[3]。目前的版本為1.0.3。主要功能是文本索引的快速構建、動態文檔集的索引維護、短語查詢、Top-k 查詢的快速處理、各種檢索模型,以及在產品搜索、桌面搜索、站內搜索、新聞搜索、大規模搜索引擎等領域中的應用。
使用FirteX首先需進行編譯和安裝, Windows平臺下使用Microsoft Visual Studio .NET 7.1 編譯FirteX。Linux平臺下的過程為:下載源代碼、配置Makefile文件、編譯FirteX,最后安裝FirteX。
建立索引時,使用Fxist工具“索引”標簽頁進行設置,在用戶參數中應設置文檔集類型、索引數據路徑、索引存放位置等,在系統參數中應設置索引內存大小、最大索引桶個數、每文檔最大索引詞個數等。參數設置完畢后,可以將參數文件保存供以后使用。最后單擊“開始索引”按鈕,啟動建立索引線程。
使用Fxist工具進行檢索,首先打開索引,選擇對應的分析器,設置返回文檔數,輸入查詢表達式,點擊查詢。
以上建立索引和檢索工作也可用函數接口如scan(掃描文檔集,建立倒排索引)、search(按表達式查詢)、doc(獲得查詢結果)等實現。
3 系統實現
系統的總體結構如圖1所示。

圖1 系統結構圖
我們借助2節所述軟件按此結構建立一個Linux平臺下的圖書垂直搜索引擎。
采集器使用Larbin,定向采集當當、卓越、互動出版網等網站。Larbin主要設置為:larbin.conf文件:去除#使noExternalLinks生效,waitDuration 設為30,depthInSite設為3,startUrl設為http://www.dangdang.com(或joyo.com等);options.h文件:生效#define SIMPLE_SAVE,#define NO_DUP;types.h文件:修改保存目錄:#define saveDir \" dangdang /\",gmake編譯后執行./larbin啟動,開始抓取網頁,中途如需中止,執行Ctrl+C,重起執行./larbin –scratch,運行狀態可以通過http://server_run_larbin:8081/查看。
分析器主要進行網頁轉換和中文分詞,前者自行編寫JAVA程序,使用正則表達式實現,后者使用ICATLAS,調用函數為ICATLAS_Paragraph(Text, SegText)。
索引器和檢索器使用Lucene[4]。主要分為構建索引服務器和檢索兩部分。構建索引服務器基本步驟為:1、提取文本;2、構建Document。Document為字段(Field)的集合類,可視為虛擬的文檔,通過add方法為其添加各字段內容(如text,title,keyword,path等);3、索引的添加。IndexWriter為創建與更新索引數據類,首先需初始化,設置索引存放的路徑、分析器、是否重新創建索引,接著即可通過重復執行addDocument方法向索引添加文檔(Document)了,調用Optimize方法對索引進行優化,最后需執行close方法關閉索引。檢索的基本步驟為:1、初始化。IndexSearcher為檢索類,首先對其初始化,設置索引存放的路徑;2、構建Query,確定檢索表達式,Query包含TermQuery(詞條搜索)、BooleanQuery(“與或”搜索)、PhraseQuery(多關鍵字搜索)等子類。3、檢索并返回結果。調用IndexSearcher的Search方法進行查詢,結果存放于Hits類對象中,length方法返回結果數,doc(n)返回第n個文檔,配合使用即可遍歷所有查詢結果。
用戶接口使用PHP實現,首先獲取用戶查詢式,把用戶通過Form輸入的查詢語句封裝發送給檢索器,然后從檢索器獲取結果,將文檔標題、路徑等分頁顯示給用戶。
4 結束語
本文立足于小型搜索引擎,在全面介紹了多種相關開源工具的基礎上,選擇以Larbin+Lucene為核心構建了圖書垂直搜索引擎。實驗證明,構建的系統能完成對上述圖書網站的檢索并返回正確結果,基本實現了預想的功能,具有較好的采集、分析、索引、檢索效率,可以符合垂直搜索引擎的各方面要求,在實驗室中也能向學生真實而全面地呈現搜索引擎的基本結構,為進一步學習研究搜索引擎奠定了良好的基礎。
參考文獻:
[1]Doug Cutting,etc.Overview of Apache Lucene[EB/OL]. http://lucene.apache.org/java/docs/
[2]Sébastien Ailleret. Larbin Multi-purpose web crawler[EB/OL]. http://larbin.sourceforge.net/index-eng.html.
[3]郭瑞杰,程學旗,許洪波,等. FirteX-高性能全文索引和檢索平臺[A].內容計算的研究與應用前沿[C].北京:清華大學出版社,2007.
[4]李剛,宋偉,邱哲.征服Ajax+Lucene構建搜索引擎[M].北京:人民郵電出版社,2006.
[5]李曉明,閆宏飛,王繼民.搜索引擎——原理、技術與系統[M].北京:科學出版社,2005.
[6]盧亮.Larbin一種高效的搜索引擎爬蟲工具[EB/OL].http://www.wespole.com/archives/00879.php
收稿日期:2007-12-27
作者簡介:許璐蕾(1979-),女,江蘇蘇州人,蘇州市職業大學計算機工程系,助教,碩士在讀,研究方向:計算機網絡。