董富江
摘要:提出一個(gè)Web頁(yè)面?zhèn)€性化搜索系統(tǒng)架構(gòu),給出了系統(tǒng)中用戶個(gè)性化信息存儲(chǔ)方法;設(shè)計(jì)了關(guān)鍵字個(gè)性化推薦和頁(yè)面排名個(gè)性化算法。
關(guān)鍵詞:Web頁(yè)面;個(gè)性化搜索系統(tǒng);個(gè)性化排名算法;關(guān)鍵詞:個(gè)性化
DOIDOI:10.11907/rjdk.143631
中圖分類號(hào):TP311.5
文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào)文章編號(hào):16727800(2015)001007002
0 引言
目前的搜索引擎大多不具備個(gè)性化信息搜索能力,因?yàn)椴煌挠脩糨斎胂嗤臋z索詞,所得到的搜索結(jié)果基本上也相同,原因是搜索引擎主要依賴于關(guān)鍵詞:索引方式查詢信息,這種方法對(duì)于復(fù)雜的層次化結(jié)構(gòu)特征信息或非結(jié)構(gòu)化信息力不從心。如何提高信息獲取的精度和效率,滿足用戶的個(gè)性化需求,是信息搜索領(lǐng)域重要的研究方向。本文基于開源搜索引擎Nutch設(shè)計(jì)和實(shí)現(xiàn)了一個(gè)個(gè)性化搜索系統(tǒng),具有頁(yè)面?zhèn)€性化排名和關(guān)鍵詞:個(gè)性化推薦功能。
1 系統(tǒng)架構(gòu)
圖1是基于開源搜索引擎Nutch實(shí)現(xiàn)的一個(gè)個(gè)性化搜索系統(tǒng)框架,具有索引更新、索引刪除、查詢優(yōu)化、網(wǎng)絡(luò)蜘蛛、分詞、索引庫(kù)、Nutch Core等模塊。
圖1 基于Nutch的個(gè)性化搜索系統(tǒng)架構(gòu)
這幾個(gè)模塊中除Nutch Core模塊外,其它模塊都是需要實(shí)現(xiàn)或配置的。圖1中的實(shí)線箭頭表示模塊間的調(diào)用關(guān)系,虛線箭頭表示調(diào)用是通過修改配置文件實(shí)現(xiàn)的。其中個(gè)性化信息庫(kù)模塊是為了收集、儲(chǔ)存?zhèn)€性化信息,并利用其設(shè)計(jì)個(gè)性化搜索。為了實(shí)現(xiàn)個(gè)性化搜索,需要對(duì)Nutch的搜索模塊進(jìn)行修改,將修改后的模塊稱為搜索優(yōu)化模塊。Nutch默認(rèn)的分詞模塊是英文的,因此在Nutch中配置了IKAnalyzer中文分詞器,在網(wǎng)頁(yè)抓取和信息檢索中實(shí)現(xiàn)中文分詞。
用戶的個(gè)性化信息存儲(chǔ)使用了MySQL開源數(shù)據(jù)庫(kù)系統(tǒng),主要設(shè)計(jì)了以下幾個(gè)數(shù)據(jù)表:①用戶基本信息表:用來存儲(chǔ)用戶的基本信息,用戶每次使用搜索引擎進(jìn)行一次搜索,即更新最近訪問時(shí)間:②用戶搜索表:用來存儲(chǔ)用戶近期使用系統(tǒng)進(jìn)行的搜索信息;③用戶興趣表:用來存儲(chǔ)用戶某次搜索輸入的關(guān)鍵字:④用戶訪問url表:用來存儲(chǔ)用戶某次訪問的URL信息??紤]到系統(tǒng)的存儲(chǔ)壓力,要對(duì)每個(gè)用戶的搜索數(shù)量、關(guān)鍵字?jǐn)?shù)量及每個(gè)關(guān)鍵字對(duì)應(yīng)的URL數(shù)量進(jìn)行限制。例如可以將每個(gè)用戶的關(guān)鍵字存儲(chǔ)數(shù)限定為1 000個(gè),用戶查詢一個(gè)新的關(guān)鍵字時(shí),就將原有的1 000個(gè)里面最早存入的第一個(gè)關(guān)鍵字刪除,將新的關(guān)鍵字插入,對(duì)URL個(gè)數(shù)也采取這種限制辦法。
2 頁(yè)面?zhèn)€性化排名算法
Nutch自帶的頁(yè)面排序算法類似于Google的PageRank算法,計(jì)算公式如下:
PR(A)=(1-d)+d(PR(1)/C(1)+…PR(n)/C(n))(1)
本文設(shè)計(jì)的個(gè)性化排名算法基于用戶行為,用戶在一段時(shí)間內(nèi)對(duì)某頁(yè)面點(diǎn)擊次數(shù)越多,或者在某頁(yè)面停留時(shí)間越長(zhǎng),頁(yè)面得分越高。為了實(shí)現(xiàn)個(gè)性化頁(yè)面排名,本文在Nutch頁(yè)面排名算法的基礎(chǔ)上,結(jié)合數(shù)據(jù)庫(kù)存儲(chǔ)的用戶個(gè)性化信息,實(shí)現(xiàn)搜索結(jié)果的個(gè)性化排名。改進(jìn)后的頁(yè)面排名算法如下:
PageScore(A)=w1×PR(A)+w2×PP(A)(2)
其中w1和w2為權(quán)重,PR(A)為Nutch算法的頁(yè)面得分,PP(A)為根據(jù)用戶個(gè)性化信息計(jì)算出來的分值,計(jì)算方法如下:
PP(A)=k1×visit_times(A)max(visit_times(doc))+k2×site_time(A)max(site_time(doc))+k3×visit_time(A)(3)
其中k1、k2、k3為權(quán)重,visit_times為用戶近3個(gè)月訪問該頁(yè)面的次數(shù),max(visit_times(doc))為用戶近3個(gè)月訪問最多的網(wǎng)頁(yè)次數(shù);site_time為用戶近3個(gè)月在頁(yè)面停留的時(shí)長(zhǎng),max(site_time(doc))為用戶近3個(gè)月網(wǎng)頁(yè)停留最長(zhǎng)時(shí)間,visit_time為用戶最近一次訪問該頁(yè)面的時(shí)間,實(shí)際計(jì)算時(shí)將該時(shí)間轉(zhuǎn)換成整數(shù)。
當(dāng)用戶輸入q查詢到相關(guān)頁(yè)面后,利用公式(2),結(jié)合用戶的歷史搜索信息,計(jì)算這些頁(yè)面的PP和PageScore,然后在Nutch源代碼中找到類DistributedAnalysisTool.java進(jìn)行修改。
3 關(guān)鍵詞:個(gè)性化推薦
3.1 用戶關(guān)鍵字矩陣生成
利用數(shù)據(jù)庫(kù)表存儲(chǔ)的歷史訪問信息生成用戶關(guān)鍵字矩陣hq:
w11w12…w1nw21w22…w2n…………wm1wm2…wmn(4)
該矩陣為m行n列,代表該用戶近期進(jìn)行了m次搜索,并且在近期搜索了n個(gè)關(guān)鍵字。矩陣中wij計(jì)算方法如下:
wij=0若用戶第i次搜索使用了關(guān)鍵字j1若用戶第i次搜索未使用關(guān)鍵字j(5)
在實(shí)際中為了加快查詢速度,可以定期離線計(jì)算并保存該關(guān)鍵字矩陣和用戶模型。
3.2 關(guān)鍵字個(gè)性化推薦
用戶搜索的關(guān)鍵字出現(xiàn)在其興趣表中,該搜索q可以表示為:
q={kw1,kw2,…kwn} (6)
可以將歷史搜索中與該搜索相似度最大的搜索推薦給用戶,否則將關(guān)鍵詞:加入關(guān)鍵詞:集合。相似度計(jì)算方法如下:
sim(q,hq(i))=cos(q,hq(i))=q×hq(i)|q|2×|hq(i)|2(7)
其中hq(i)即為hq矩陣的第i行,為當(dāng)前用戶的第i次搜索。
在實(shí)際設(shè)計(jì)中,向用戶推薦的搜索與用戶當(dāng)前搜索共同作用,可以更加精確地概括用戶的搜索傾向,進(jìn)一步縮小搜索范圍。
4 系統(tǒng)實(shí)現(xiàn)
在Windows下可以使用Cygwin和Nutch自帶的蜘蛛抓取頁(yè)面和建立索引,也可以通過一些設(shè)置,使得抓取的信息為某一個(gè)主題信息。抓取結(jié)束后可以使用Luke工具查看建立好的索引,也可以使用Luke工具進(jìn)行信息檢索。實(shí)現(xiàn)頁(yè)面?zhèn)€性化排名算法和關(guān)鍵字個(gè)性化推薦算法后,將Nutch重新進(jìn)行編譯,部署到JSP容器(如Tomcat)后即可進(jìn)行非個(gè)性化信息檢索。部署好后啟動(dòng)Tomcat,打開瀏覽器,輸入:http://localhost:8080/nutch,回車,即可看到Nutch搜索頁(yè)面。
5 結(jié)語
本文實(shí)現(xiàn)的頁(yè)面?zhèn)€性化排名和頁(yè)面?zhèn)€性化推薦算法具有一定的應(yīng)用價(jià)值。進(jìn)一步研究Nutch的實(shí)現(xiàn)機(jī)制和Web數(shù)據(jù)挖掘技術(shù),使用分布式技術(shù),以更好地實(shí)現(xiàn)信息的個(gè)性化搜索和個(gè)性化頁(yè)面推薦,提高檢索系統(tǒng)的性能,還有很多工作要做。