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