【相關(guān)性分析】
場(chǎng)景1:新版的CSDN論壇發(fā)帖子的時(shí)候,用戶(hù)要在論壇問(wèn)一個(gè)問(wèn)題,剛剛輸入完問(wèn)題標題按,在標題輸入框失去焦點(diǎn)或者出發(fā)OnChange事件的時(shí)候,就會(huì )在旁邊一個(gè)區域顯示該問(wèn)題相關(guān)的帖子,你會(huì )發(fā)現有時(shí)候這些相關(guān)帖子里有的恰恰就是你要問(wèn)的問(wèn)題,你直接去看那個(gè)帖子的回復就行了,不用自己發(fā)帖子了。這是一個(gè)很好的相關(guān)性分析的應用場(chǎng)景。
場(chǎng)景2:新版的CSDN博客,在你查看一篇博客的時(shí)候都會(huì )在最下面顯示相關(guān)的帖子,可以幫助你延伸閱讀,而且相關(guān)性很高,一般看一個(gè)帖子都會(huì )隨著(zhù)相關(guān)帖子的指引多看幾篇帖子。我感覺(jué)那個(gè)是通過(guò)tag來(lái)關(guān)聯(lián)的,就是隨機顯示幾個(gè)相同Tag的帖子,實(shí)現比較簡(jiǎn)單。
下面是我的實(shí)現分析
1、用戶(hù)輸入帖子標題
2、系統對帖子標題進(jìn)行分詞,包括近義詞,同義詞轉換,去除停止詞等操作(可事先建立一套專(zhuān)業(yè)詞庫,比如說(shuō)公司內部的詞庫或者.net領(lǐng)域的詞庫,可考慮用ShootSearch,自己再改改)
3、系統對分詞后的詞語(yǔ)數組進(jìn)行優(yōu)先級排序(可根據一個(gè)事先排好序的詞庫來(lái)排序,比如說(shuō)nhibernate就比java這個(gè)詞優(yōu)先級高,因為 nhibernate比較具體,要找出相關(guān)的帖子應該優(yōu)先匹配和nhibernate相關(guān)的帖子,而不是和java這個(gè)詞相關(guān)的帖子)
4、系統按優(yōu)先級依次去索引里去查找該關(guān)鍵字搜索出來(lái)的帖子編號(可事先用lucene把所有的帖子建立好索引(索引域有tag,postid,hits,rank就夠了,盡量減少索引大?。?,并用多線(xiàn)程并行搜索以提高搜索速度)
5、系統根據每個(gè)帖子的評分和瀏覽次數對相關(guān)帖子編號進(jìn)行倒序排列
6、系統依次用前5個(gè)帖子編號去數據庫查帖子的編號并顯示給用戶(hù)。
【熱點(diǎn)發(fā)現分析】
場(chǎng)景:每天有大量的博客發(fā)布新帖子,大家都在發(fā)關(guān)于哪些信息的帖子呀,好多人關(guān)心這個(gè)問(wèn)題,外國一些dig網(wǎng)站都會(huì )自動(dòng)給你找出每天人們關(guān)注的關(guān)鍵詞或者帖子,不過(guò)dig是人工推薦的,還有的自動(dòng)分析的,咱就討論下自動(dòng)分析的。
下面是我的分析
1、用nutch抓網(wǎng)頁(yè),把百度空間,博客部落,博客園,博客堂,博客中國,新浪博客等知名中文博客作為信息源
2、給當天抓取的所有網(wǎng)頁(yè)(標題和內容)進(jìn)行分詞并索引,做分詞的時(shí)候每出現一個(gè)新詞放到一個(gè)哈希表里,這個(gè)詞每再出現一次就把它的計數器加一,直到把所有網(wǎng)頁(yè)索引完。(不過(guò)這個(gè)哈希表可能會(huì )很大,可考慮做一個(gè)詞庫,只往哈希表里添加詞庫里的詞,然后用一些訓練算法來(lái)維護這個(gè)詞庫,自動(dòng)給這個(gè)詞庫加入新詞。)這樣每天最熱的詞就出來(lái)了。
3、做索引的時(shí)候只給標題分詞,也用一個(gè)哈希表算出標題最熱的關(guān)鍵詞(算法同上)。
4、做索引的時(shí)候把每個(gè)網(wǎng)頁(yè)正文的超鏈接(一個(gè)只有鏈接地址聚合的數組)提取出來(lái),作為一個(gè)域索引下來(lái)
5、做完索引后,找出前十個(gè)標題關(guān)鍵字,分別在索引上檢索出每個(gè)關(guān)鍵字的網(wǎng)頁(yè),
6、然后掃描一遍索引,把第4步索引的鏈接域和第五步找到的網(wǎng)頁(yè)進(jìn)行匹配,如果該網(wǎng)頁(yè)被其它網(wǎng)頁(yè)鏈接一次它的評分就+1(這個(gè)算法可能比較浪費時(shí)間和空間,如果做抓網(wǎng)頁(yè)的時(shí)候能抓一個(gè)網(wǎng)頁(yè)流浪量的域,也可以作為一個(gè)評分的標準)
7、系統顯示出前十個(gè)標題關(guān)鍵字評分最高的的十個(gè)帖子作為今天的熱點(diǎn),并依次把較低評分的網(wǎng)頁(yè)作為相關(guān)網(wǎng)頁(yè)來(lái)供查看。
8、如果發(fā)現這10個(gè)帖子里有兩個(gè)帖子相似度較高的(分析網(wǎng)頁(yè)標題的哈希碼可以判斷是否相同,但是相似度就不好做了),就去掉一個(gè),把第11個(gè)頂上來(lái)
遺留問(wèn)題:抓網(wǎng)頁(yè)的時(shí)候是否考慮去除相似的網(wǎng)頁(yè),因為有人發(fā)了個(gè)帖子,別人都轉貼,最后都不知道原作者是誰(shuí)了。
【自動(dòng)分類(lèi)】
場(chǎng)景:在百度問(wèn)問(wèn)題的時(shí)候,你提出一個(gè)問(wèn)題,會(huì )自動(dòng)把你的帖子推薦到一個(gè)合適的分類(lèi)?;蛘哂械氖詹貖A系統你收藏一個(gè)帖子會(huì )自動(dòng)給你收藏的這個(gè)帖子打tag,甚至有些外國的搜索引擎你搜索一個(gè)結果,直接就把你的結果做聚類(lèi)操作了(這里不區分聚類(lèi)和分類(lèi)先)。
下面是我的分析
1、事先做一個(gè)詞庫,結果是一個(gè)關(guān)鍵字對應多個(gè)詞,比如說(shuō)java這個(gè)關(guān)鍵字對應spring,ejb,jvm,jms等詞。這個(gè)詞庫人工來(lái)初始化,以后靠一定的算法來(lái)維護。
2、用戶(hù)發(fā)帖子的時(shí)候,給帖子標題分詞,并在詞庫里反向查找每個(gè)詞屬于那個(gè)關(guān)鍵字,然后顯示出這些關(guān)鍵詞。
遺留問(wèn)題:詞庫用什么數據結構來(lái)保存,物理上怎么存放能保證反向查找的性能。
另外問(wèn)個(gè)問(wèn)題再:誰(shuí)能給找點(diǎn)關(guān)于索引物理結構的資料,比如lucene的索引文件格式分析,以及算法,或者是sqlserver索引的B樹(shù)結構存儲方式和索引查找算法,索引重建的算法等。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。