陳建峽,李志鵬
(1湖北工業(yè)大學計算機學院,湖北 武漢430068;2湖北工業(yè)大學電氣與電子工程學院,湖北 武漢430068)
博客(blog)已成為互聯(lián)網(wǎng)中信息傳播的重要途徑之一,但博客進入的零門檻和缺少監(jiān)管也導致它很容易變成新的信息垃圾場[1]?,F(xiàn)有的眾多博客平臺利用了傳統(tǒng)的搜索引擎,不僅檢索速度慢,而且在服務、管理以及價值導向等方面往往忽略了用戶體驗[2]。為此,本論文研究并實現(xiàn)了一個博客搜索引擎,從博客內(nèi)容相關度、論文內(nèi)容的實時性等方面對博客信息進行排序篩選,為用戶提供有價值的信息和良好的用戶體驗做出積極探索。
博客網(wǎng)站的內(nèi)容大部分是以RSS文件格式發(fā)布的,RSS(簡易信息聚合,也叫聚合內(nèi)容)是一種描述和同步網(wǎng)站內(nèi)容的格式,RSS文件是非常標準的XML文件,具有標簽明確、易于解析等特點,RSS/XML是目前使用最廣泛的XML應用[3]。隨著RSS技術的發(fā)展,必將有更多的信息由RSS來描述,博客搜索引擎也必將會有更大的應用范圍和空間。
Heritrix是開源的Web網(wǎng)絡爬蟲,其最大的優(yōu)點是,它可以擴展,開發(fā)者們能夠擴展它的各部分組件,從而實現(xiàn)各自的抓取目的和邏輯[5]。Heritrix設計非常嚴格,Heritrix按照robots.txt文件來排除指示和META robots標簽。Heritrix的工作過程見圖1[6]。
Heritrix主要部件及功能簡介如下:
1)Heritrix擁有:a)范圍部件:根據(jù)規(guī)則判定把哪個URI放入隊列。b)邊界部件:追蹤被收集的預定計劃的URI,以及已經(jīng)被收集的URI,挑選下一個URI,將處理過的URI進行去除處理。c)處理器鏈:包括一些處理器獲取的URI,對結果進行分析,將URI回傳給邊界部件。
2)其余部件:a)WEB管理控制臺:絕大部分都是基于單機的WEB應用,內(nèi)嵌JAVA HTTP服務器。操作人員通過選擇Crawler命令的方式來操作控制臺。b)Crawler命令處理部件:包括創(chuàng)建要爬的URI的足夠的數(shù)據(jù)信息。c)處理器緩存(Server cache):存放持久的服務器的信息,可以隨時搜索到被爬行的部件,包含機器人策略,IP地址以及歷史記錄。d)預取鏈:是做一些準備性的工作,例如,對延遲進行重新處理,否定隨后的操作。e)提取鏈:獲得數(shù)據(jù)資源,轉換DNS,請求以及響應表單填寫。f)抽取鏈:完成數(shù)據(jù)資源提取之后,抽取目標HTML,JavaScript,通常那里有符合要求的新的URI,這時URI只是被發(fā)現(xiàn),并不會被評估。g)寫鏈:將爬行的結果進行存儲,將抽取的特性和內(nèi)容進行返回,過濾完后存儲。h)提交鏈:進行最后的維護操作,例如,不在范圍內(nèi)的進行測試,提交至邊界部件。
ISE(Iycos Search Engines)中文全稱為全文檢索引擎,其中Lucene作為開源的ISE工具包??梢哉f,Lucene僅僅是ISE整體的架構,不能說是比較完整的ISE,它能夠給應用程序開發(fā)者提供比較完整的查詢引擎、索引引擎、少量的文本解析引擎[7]。它以給開發(fā)人員提供簡單易用的工具包為目標,對應用程序開發(fā)人員開發(fā)實現(xiàn)全文檢索的應用程序提供了很大的便利,同樣也能夠以Lucene為基礎去實現(xiàn)更加完整的ISE。Lucene體系結構見圖2。
圖2 Lucene體系結構圖
從圖2可以看出,Lucene具有很清晰的整體結構,能夠給應用程序的開發(fā)人員提供非常好的代碼支持,同時Lucene也具備非常良好的可擴展性。Lucene同樣對于文件的索引操作進行了良好的封裝,尤其是對中文語言的詞語分割操作進行了很好的擴展,程序開發(fā)人員對于Lucene更加容易理解,更加容易使用。
Android是以Linux操作平臺為基礎的開放源代碼的手機操作系統(tǒng),Google公司在2007年11月的時候宣布了該移動終端操作平臺的名稱,該操作平臺主要由操作系統(tǒng)、中間件、用戶界面以及上層的應用軟件組成。Android操作系統(tǒng)的底層主要是基于Linux內(nèi)核,采用C語言進行開發(fā),提供的僅僅是一些最基本的功能;Android平臺的中間層主要涵蓋了虛擬機庫以及API庫,采用C++語言進行編寫;最上層是一些不同形式的應用程序,有SMS程序,軟件公司自己開發(fā)的相關軟件,采用java進行開發(fā)。Android平臺被稱為首個開源的、結構完整的面向移動終端的操作平臺。
從軟件分層視角出發(fā)(圖3),Android系統(tǒng)由頂層到底層分別為:應用程序、應用程序框架、Android運行器、系統(tǒng)庫、Linux內(nèi)核這五個模塊組成。
圖3 Android系統(tǒng)架構圖
1)應用層。最上層的是應用模塊,也是一般的Android開發(fā)工程師操作的模塊,比如打電話、發(fā)微博等應用都處于該層;
2)應用程序部件。該部件為Android研發(fā)的核心基礎,研發(fā)人員絕大部分情況下和該部件打交道。該層主要含有管理器、視圖系統(tǒng)、電話管理器以及資源管理器等九大部分;
3)Android運行器。Android中應用程序編寫采取Java語言,但是,并不采取J2ME運行,相反,是采取Android自帶的Android程序進行運行;
4)系統(tǒng)庫層。由圖3可以看出,Android函數(shù)庫位于內(nèi)核層之上,函數(shù)庫是應用程序框架的基礎。函數(shù)庫中有媒體函數(shù)庫,SurfaceManager,Webkit,SGL,openGLES,F(xiàn)reeType以及媒體框架,SQLite和Libe等庫。
基于Android開發(fā)的RSS博客搜索引擎,能夠完成從RSS博客數(shù)據(jù)的爬取、RSS博客數(shù)據(jù)索引、Android用戶檢索博客的功能,系統(tǒng)總體設計架構圖見圖4。
圖4 系統(tǒng)總體架構圖
2.2.1 RSS博客數(shù)據(jù)處理 將RSS/XML文件進行切分,并且以博客為單位進行切分,那么在文件中就是對item進行切分。切分完成之后再進行解析并加以索引。
2.2.2 RSS文件的分析與解析 將RSS文件爬取下來,將RSS/XML文件進行切分,并且以博客為單位進行切分,在文件中就是一個item進行切分。切分之后會按照這個文件的文件名形成一個文件夾,文件夾內(nèi)保存了本論文按照item切分后的文件,切分后也是XML文件。切分完成之后再進行解析并加以索引。
這個RSS文件并沒有遵從RSS 2.0標準。在這里本論文自己定義了RSS結構,去除了RSS2.0原本的一些無用信息,只保留了以下幾種信息:1)源信息TITLE,相當于站點名;2)源博客鏈接,也就是源博客地址鏈接;3)源博客的更新時間;博客內(nèi)容沒有任何改動,從其中可以看到包括博客標題,博客地址,博客內(nèi)容,博客作者,博客標簽,博客評論地址,博客發(fā)表時間等信息。
在英文措辭中,單詞之間的空格是一種自然的分隔符,而中文只有句、段落由明顯的分隔符簡單地劃分,但是詞卻沒有正式的分隔符,雖然劃分問題也存在于英語短語,但這一層的中文比英語要復雜得多,困難得多。目前,常用的Paoding中文分詞器、JE中文分詞器和IK Analyzer,本論文采用IK Analyzer中文分詞工具包,它是一個開源的、基于java語言開發(fā)的輕量級的工具包。
IKAnalyzer分詞采用從左向右取待切分漢語句中的m個字符作為匹配字段,m為機器詞典中最長詞條個數(shù),查找詞典并進行匹配。若匹配成功,則將這個匹配字段作為一個詞切分出來。若匹配不成功,則將這個匹配字段的最后一個字去掉,剩下的字符串作為新的匹配字段,進行再次匹配,重復以上過程,直到切分出所有詞為止。Lucene自帶分詞器和IK分詞器的分詞效果對比見圖5。
圖5 Lucene/IKAnalyzer分詞效果對比
由此可見,IK分詞器分詞準確率明顯高于Lucene自帶分詞器。
有了Lucene[7]的幫助,檢索就變得很簡單了,只需要調(diào)用Lucene自帶的API就能輕松的實現(xiàn)RSS檢索。索引數(shù)據(jù)主要步驟為:1)將RSS數(shù)據(jù)切分成一篇篇獨立的博客;2)將XML文件解析成CLASS便于按類別索引;3)利用第三方中文分詞器(例如IK分詞器)進行中文分詞;4)按Title和Description分別進行索引。
排序優(yōu)化算法的設計是搜索引擎系統(tǒng)的重點也是難點。由于Lucene自帶的網(wǎng)頁排序算法僅僅考慮了網(wǎng)頁自身的內(nèi)容,忽略了網(wǎng)頁間的關系,導致搜索精確度不高,不能充分體現(xiàn)網(wǎng)頁的重要性。本論文利用改進后的PageRank算法對Lucene原有的排序算法進行了優(yōu)化。
任何一個搜索引擎給用戶最重要的體驗絕不在于給用戶提供更多的結果,而在于將最重要的結果優(yōu)先展現(xiàn)給用戶。在Lucene排序算法中,所需獲取的重要信息并不是用戶所查詢的關鍵詞在包含的文檔中所出現(xiàn)的位置,而是該文檔所包含的這個關鍵詞的個數(shù)。假如在該文檔中所包含的該關鍵字的個數(shù)越多的話,那么這個文檔的score就會越高;需要注意的是,如果在該文檔當中,和關鍵詞關系不大的詞語越少的話,那么該文檔的score也會越高。
前文提及了Lucene的網(wǎng)頁排序算法只考慮他們自己的內(nèi)容,沒有考慮網(wǎng)頁之間的關系,使得檢索精度不高,不能完全反映頁面的重要程度。通過對比眾多排序算法,本文采用PageRank排序算法對Lucene自帶的排序算法進行改進。
PageRank網(wǎng)頁排名算法的基本思想最初來源于谷歌的排序算法,它的特點是重視網(wǎng)頁的重要程度,只有高度重要的網(wǎng)頁在PageRank算法中才會得到較高的評分,運算出web頁面的權值,即網(wǎng)頁排名,網(wǎng)頁排序就會變得更為準確。PageRank的本質(zhì)是網(wǎng)頁排序算法,主要通過數(shù)值的形式來表示任意網(wǎng)頁在Internet中的重要程度。PageRank算法的原理:通過在Internet中爬取的眾多的網(wǎng)頁鏈接中,挑選出來的權值較高的網(wǎng)頁鏈接中所鏈接到的其他網(wǎng)頁,可以認定這些被鏈接的網(wǎng)頁同樣也是優(yōu)質(zhì)的,根據(jù)這個原理對網(wǎng)頁的重要程度進行判斷[8]。PageRank算法的原理和引用文獻的原理差不多,假如一篇文獻被引用的次數(shù)越多,很顯然可以認定這篇文獻越有用;假如這篇文獻被比較高等級的文獻引用,同樣能夠說明這篇文獻越重要。PageRank網(wǎng)頁排名算法的特點是,該算法對Internet上所有的網(wǎng)頁都有一個全局的權重值排序。而且,PageRank算法中,網(wǎng)頁的權重值的計算是離線計算的,對于響應用戶請求是非常有利的。PageRank網(wǎng)頁排序算法的不足之處在于,很顯然,舊網(wǎng)頁權重值會比新網(wǎng)頁權值大,這就是文中使用時間因子對PageRank算法進行改善的原因。
其計算公式如
式中,各個參數(shù)含義如下:
P(A):網(wǎng)頁A的PageRank評分。tl-tn:網(wǎng)頁A的被鏈接的網(wǎng)頁。C:網(wǎng)頁A的出度值。d(damp factor):阻尼系數(shù)(Google d=0.85)。
從公式(1)可以發(fā)現(xiàn),網(wǎng)頁的排名權重也就是PageRank值與頁面之間的關系是非常緊密的,PageRank網(wǎng)頁排名算法采取的是迭代的方法來運算網(wǎng)頁排名權重值,也就是說,頁面初值選擇以及迭代數(shù)量,會對計算結果的準確性產(chǎn)生影響。初始值取為1時,加入了阻尼系數(shù)d可以保證在實際計算過程中運算的收斂。圖6即為PageRank(網(wǎng)頁排名)算法流程圖。
圖6 PageRank排序算法流程圖
仔細理解PageRank算法,會發(fā)現(xiàn)該算法初期也是有缺點的,對本論文中檢索的結果影響非常大的一個關鍵因素是時間因子,就是本文需要的是最新網(wǎng)頁提供的最新消息,也就是人們常說的實時性。假設:一個網(wǎng)頁被搜索到的時間與其最近一次被修改時間的差值越大,則網(wǎng)頁內(nèi)容的價值越低,權威性就越低。在這個假設下,引入一個與時間有關的權值t,與網(wǎng)頁的權值呈反比。其中,時間因子的取值為t,
改進后的PR排序優(yōu)化算法流程見如圖7。改進后,PR排序得分公式為
圖7 PageRank排序優(yōu)化算法流程圖
公式(2)中的Score(Title)和Score(Description)為Lucen排序?qū)Ψ祷亟Y果的標題和內(nèi)容的評分,PageRank為由Hertrix抓取的鏈接計算的頁面的PageRank值,t為時間因子。
為進行添加優(yōu)化后的PageRank算法的Lucene網(wǎng)頁排序算法的效果測試,本論文在搜索引擎系統(tǒng)中進行了Lucene排序算法改進前后的性能測試。用兩種排序算法對不同的關鍵詞進行查詢,然后,分別用改進前后的Lucene排序算法進行測試,搜索“科比”測試結果見表1。需要指出的是為了提高排序的準確度,在計算PR優(yōu)化后的排序值時,本論文放大了1000倍。
表1 PR優(yōu)化算法與Lucene原有排序算法的搜索比較
因為搜索引擎是為網(wǎng)民們提供檢索服務,因此,用戶的滿意度,也就是說,搜索引擎系統(tǒng)返回的檢索記錄顯得尤為重要。本文中,這項工作選擇10個測試人員,分別為RSS的博客主題搜索引擎(Lucene排序算法改進前后的系統(tǒng))進行了測試。測試人員隨意選取關鍵字、單詞、短語測試20次,測試用戶滿意度以前十位作為評價標準,計算滿意度
上式中,ti為第i次查詢結果集中,測試者認為對自己問題有幫助的信息數(shù)量。
移動客戶端在與PC服務器端成功建立通信之后,就可以進行搜索了。圖8就是RSS博客搜索主界面以及搜索界面。
圖8 Android客戶端運行界面以及搜索界面
在深入研究搜索引擎及相關技術的基礎上,設計并實現(xiàn)了爬取博客網(wǎng)站的RSS種子連接、提取RSS信息并索引等;并研究了切分XML文件;設計并實現(xiàn)了檢索器,并在之上提出了自己的排序優(yōu)化算法。使用了速度較快的快排算法。未來的工作將會深入研究用戶興趣,完善系統(tǒng),如收藏博客等。
[1] Dean J.Blog theory:Feedback and capture in the circuits of drive[M].New Jersey:John Wiley & Sons Inc,2013.
[2] 陳建峽,黃 日,馬忠寶.基于PageRank的Lucene排序算法優(yōu)化與實現(xiàn)[J].計算機工程與科學,2012,34(10):123-127.
[3] Cohen E,Kaplan H,Milo T.Labeling dynamic XML trees[J].SIAM Journal on Computing,2010,39(05):2 048-2 074.
[4] Meier R.Professional Android 4application development[M].New Jersey:John Wiley & Sons,Inc.,2012.
[5] Chen,Jianxia,Ri Huang."A price comparison system based on Lucene."2013 8th International Conference on Computer Science & Education [C].Colombo:IEEE-ICCSE,2013.
[6] 吳 偉,陳建峽.基于 Heritrix的web信息抽取優(yōu)化與實現(xiàn)[J].湖北工業(yè)大學學報,2012,27(02):23-26.
[7] Zhao S,Li C,Ma S,et al.Combining pos tagging,lucene search and similarity metrics for entity linking[M].Berlin:Springer,2013:503-509.
[8] Langville A N,Meyer C D.Google's PageRank and beyond:The science of search engine rankings[M].New Jersey:Princeton University Press,2011.