摘要:在當今互聯網的各大論壇,帖吧,個人空間,BLOG中存在著非常多的網友發布的薪水,職業,等方面的信息。如在各大高校的BBS中,每年到應屆生加入求職大軍時,相當一部分學生會就各公司的薪水狀況,福利待遇進行詢問以及討論,而一部分得到公司職位的學生亦會在一定程度上公布公司的薪水待遇狀況。這一類各公司的薪水信息,對于以后學生的求職,職業人士跳槽,具有相當的參考價值。同樣,在各大論壇,互動社區中,都會有相當大的薪水信息帖。
很不幸的是,這些薪水討論帖子淹沒在浩淼的互聯網中,并且通過互聯網在大陸近十年來發展積淀,此類信息已經達到了海量。利用成熟的Lucene框架,文本檢索理論(Information Retrieve),以及相關的分詞,歸類,索引技術,將這些信息,按照網友提交的關鍵字進行抽取與分析。按網友需要搜索出具備參考價值的職業信息。為網友的求職,跳槽,提供決策支持。
關鍵詞:網絡;數據;搜索;中文切詞;公司待遇;公司評論;Lucene
中圖分類號:TP391文獻標識碼:A文章編號:1009-3044(2008)25-1386-02
Web Forum Data Analyzing Based on Lucene
LIU Fei
(Tongji Unversity, Software College, Shanghai 201804, China)
Abstract: Nowadays, millions of data that are related salary, payment, bonus, company commentary exist in forum, post bar, BLOG. For example, at every school-forum, companies' salary, bonus and commentary always are most hot topic. When undergraduate are in searching of job, that information is one of most valuable reference. Particularly, some student who take company's offer usually post the offer's information on his school-forum or his private space such as BLOG, or QQ zone, etc. Unfortunately, that information usually disappears by data growing. And, for the past several decades, hundreds of millions of above information have being increasingly accumulated on Internet. Study show that a framework named Lucene is a fully capable of realizing data analyzing, splitting character and response the right result to customer by those requesting include salary inquiring, company inquiring etc.
Key words: Internet; Search; Chinese split; Salary; Lucene
1 引言
隨著十數年互聯網在大陸地區的發展,網民數量,互聯網技術的使用已經得到了相當大的提高與進步。與此相伴的,是網絡數據呈幾何級的增長。這其中,有數以億計的信息存在在浩淼的網絡中,特別是一些相當有參考價值的數據信息。例如,關于一個公司的薪水信息,職業發展信息,福利,評論等信息,這類信息廣泛地存在與網絡中的論壇,個人空間等互聯網載體中。而當今的各大搜索引擎,因為其Page Rank的規則,使的一些具備相當價值的此類信息不能被準確的搜索到,而一些信息獲取框架的發展成熟,使得重新建立基于此類信息的搜索引擎以及搜索規則成為可能。例如Lucene 全文索引框架,同比其他同類框架,是一款相當成熟的建立索引開源技術架構。
2 Lucene 初探
2.1 Lucene 介紹
Lucene是一款基于JAVA語言開發的開源全文檢索工具包,它提供基本的分詞,索引建立,全文搜索等功能API,使得全文檢索功能開發者可以按照項目所需,開發基于需求意圖的全文檢索項目。其主要構架如圖1。
如圖1所示,基于Lucene的應用,其核心是索引(index)的建立于使用。Lucene對采集到的數據建立索引,然后按照用戶需求,對用戶的搜索請求進行分析及切詞,搜索所建立的索引,反饋給用戶搜索結果。
2.2 建立索引
在Lucene 中,提供了基本的創建索引所需的類,其中兩大最重要的類分別為:
2.2.1 IndexWriter
此類是建立索引的核心,它除了創建索引以外,還可以將待索引文檔添加到存在的索引中
其中,代碼片段如下所示:
2.2.2 Analyzer
此類是一個詞法分析(分詞)的抽象基類,提供給具體實現分詞等功能的分析器繼承之用。它作為IndexWriter類構造函數的參數之一,在建立索引的時,利用此分析器對文本內容按照分析器的具體實現進行分詞與歸類。如圖2可知,類StandardAnalyzer即為Analyzer的子類,提供標準化的分詞。
需要特別提出的是,對于支持中文分詞方面,目前Lucene還未有提供對于中文分詞的Analyzer,但是在大陸已經有愛好者或機構開發出了基于Analyzer的中文分詞類,其中較為常用的就是MMAnalyzer。
綜上,以上介紹的兩大類,是建立全文索引的關鍵,其中對于分析器Analyzer,用戶可以按照自己所需要的分詞規則進行開發,這里面就設計到編譯原理里面的詞法分析以及相應的分詞規則。在此,不做深究。
2.2.3 部分實現代碼
基于以上關鍵類的描述,其余實現全文索引建立的代碼如下所示:
說明:按照inputDir所輸入的文件路徑,讀取需要建立索引的文件。
接下來,就應該為所讀取的文件建立索引,流程為,遍歷files文件數組,為每一個文件名,以及文件內容建立索引關鍵實現代碼如下:
在為每個文件建立索引時,都需要生成一個Document對象,此為Lucene生成索引的對象核心。接下來,如圖所示,為每個文件名建立索引,即生成Field對象,如要對內容生成索引,則需生成新的Field對象,并且添加到Document對象中去。
*Field.Store為Field是否存儲標識,參數類型分為:yes(存儲),no(不存儲),COMPRESS(壓縮后存儲)
*Field.Index 為 Field 是否索引標識,參數類型分別為:no(不需要索引),tokenized(表示該field先被分詞再索引),un_tokenized(先不分詞,但是要建索引),no_norms(進行索引,但不使用Analyzer,同時禁止其參加評分,重要是為了減少內存的消耗)
2.3 檢索索引
Lucene 提供了多種對索引檢索的方式,在此,著重介紹的是布爾(BooleanQuery)搜索.顧名思義BooleanQuery就是布爾型查詢,在布爾型查詢的對象中,包含一個字句的組合,各種子句間都是“與”,“或”這樣的布爾邏輯。因此,布爾查詢就是一個由多個字句和字句間的布爾邏輯所組成的查詢。所有的查詢都最終都可以分解為布爾查詢。
2.3.1 關鍵代碼分析
IndexSearcher:是檢索索引的核心,所有的搜索都要通過此類的實例實現。
其中參數INDEX_STORE_PATH為索引存放的路徑,此與建立索引時存放的路徑一致。
Term:代表每個待搜索的關鍵字以及需要搜索的Field。初始化代碼如下圖所示:
其中參數content,表示待搜索索引的Field名稱,此與建立索引時生成Field的名稱一致。
TermQuery:表示各個Term對索引的查詢。
BooleanClause.Occur.MUST:表示對應的字段查詢在搜索中必須出現。
BooleanClause.Occur.MUST_NOT:表示對應的字段查詢在搜索中不能出現。
綜上,就將兩個查詢字段組合成了布爾查詢。
Hits:此search方法的返回參數,其包含每個搜索得到的Hit對象,即為搜索結果集。其中,iterator()方法可以將此結果集轉換為Iterator對象,即可遍歷內容結果。
2.3.2 QueryParser
QueryParser提供給用戶,當輸入的不是單個詞條,而是一段話或者詞條組合的時候,按照所提供的Analyzer進行分詞搜索的功能。可參見如下示例:
如上代碼所示,當用戶提交的查詢語句為短句是,則提供相應的的Analyzer:StandardAnalyzer,對短句進行分詞查詢。
其中,如果需要所得各分詞在內容中為“與”的關系,則設置parser的Operator為AND_OPERATOR。當然亦可以設置為“或”關系,此標識符參數為QueryParser提供。設置代碼如下所示:
3 技術展望與小結
按照該項目要求,主要集中搜索的網絡內容是各大高校論壇,個人空間,職業咨詢站點等,故當使用網絡內容抓取工具時,集中在此類域站點提取頁面內容,并可以設置關鍵字,優先提取一些包含公司關鍵字的內容,如薪水,公司名,福利等。
同時,在對待頁面內容搜索排名時,應該按照此項目需求,設置一整套評分標準,對包含公司信息較多的頁面,排名應該越高,應該越能滿足用戶的搜索意圖。
Lucene自從誕生到現在,已經發展到2.0的版本,其技術框架,提供的功能API已經相當的成熟與完善,而且其開源版本,更是可以讓開發者更有效率的開發自己的搜索項目。并且,隨著互聯網技術的進一步發展,快速開發自己所需的搜索引擎逐漸會成為可能與現實。
互聯網迅猛發展了十余年,其中蘊藏了海量的信息,其中有糟粕,但更多的,卻是一些相當有價值,但很難被人找到的信息。
而當今世面上的各大搜索引擎,因為其PageRank的規則是面向整個網絡的信息,所以對很大一部分特別價值信息的網絡內容搜索結果不能很好地滿足特定用戶的搜索意圖。這,就給Lucence等全文檢索框架提供了非常良好的施展空間的平臺:開發者可以迅速靈活地為各類信息的需求者開發搜索平臺,找到被遺忘在浩瀚網絡中的特定信息。
參考文獻:
[1] Gospodnetic O,Hatcher E. Lucene in Action[M]. 譚鴻,譯. 北京:電子工業出版社,2005.
[2] 李曉明.搜索引擎原理技術與系統[M].北京:科學出版社,2004.
[3] RIJSBERGEN J.Information Retrieval[M]. Boston:Butterworth-Heinemann, 2003.