基於內容的簡單相關新聞推薦系統方案

寫作背景

最近接手一個新聞項目,項目比較小,屬於官網的一個支站,官網新聞條目有700多萬條,我負責的支站新聞條目11萬條,我想拿這個小支站用來練練手,做一個小的基於內容的新聞推薦,當用戶閱讀某篇新聞時,旁邊顯示和這條新聞相關的新聞列表。

總體思路

站點比較小,簡單 能實現要求就好,主要步驟如下所示
建立標籤庫,爲每篇文章加要標籤
標籤庫的建立主要有三種方案
1. 數據庫新聞表中添加一個tag字段,多個標籤一般用”,”分隔

            title                           tags
公共場所VIP現象氾濫 被指易引發不公平爭議  公共場所VIP現象氾濫,被指易引發不公平爭議
六成網友中學知識已忘光 四成學習就爲考試    六成網友中學知識已忘光,四成學習就爲考試
貴州鎮遠報京侗寨發生火災 100餘棟房屋被燒  貴州鎮遠報京侗寨發生火災,100餘棟房屋被燒
中國外交部:望平衡各自關切 重啓六方會談    中國外交部:望平衡各自關切,重啓六方會談
市領導帶頭捐款  專項用於生產生活污水治理   市領導帶頭捐款,專項用於生產生活污水治理
美國:暴風雪席捲東北部 陸空交通嚴重受阻    美國:暴風雪席捲東北部,陸空交通嚴重受阻
當情人節遭遇元宵節 西湖濃情上演美好快閃    當情人節遭遇元宵節,西湖濃情上演美好快閃
餘額寶推一年期理財產品 150萬人已預約認購  餘額寶推一年期理財產品,150萬人已預約認購
除夕至初三網銀暫停跨行轉賬 ATM機不受影響  除夕至初三網銀暫停跨行轉賬,ATM機不受影響
數據說春運:接送父母來過年 逆向遷徙漸熱    數據說春運:接送父母來過年,逆向遷徙漸熱
錢包“完璧歸趙” 衆人“接力”找失主  爲讓錢包“完璧歸趙”,衆人“接力”找失主
烏克蘭:和談破裂局勢失控 美國威脅要制裁    烏克蘭:和談破裂局勢失控,美國威脅要制裁

以上爲原先數據庫中的標籤,這些標籤可能是編輯不太懂,導致部分標籤過長,有的甚至就是新聞名稱,原先數據庫就是按這種方式建立標籤庫的,這種標籤並沒有太大的做用,主要有以下幾點缺點:
標籤名過長
無法通過索引查找標籤
無法統計標籤新聞數量
總結原先庫中的標籤幾乎沒用

  1. 增加兩張表,一張爲標籤表,一張爲標籤與文章映射表,如下
    標籤表:
id  name   sore     num
1   新聞  1            4367
2   諸暨  0.730766    1375
3   中國  0.684373    883
4   浙江  0.634607    2860
5   杭州  0.605594    3450
6   廣播  0.526306    954
7   我市  0.487695    2065
8   視頻  0.444434    911

其中sore爲標籤權重 ,num爲標籤引用數量

標籤與文章映射表:

id article_id tag_id
1   16802       728
2   24641       728
3   23955       729
4   22117       729
5   24362       738

文章中增加標籤字段:

title                                     tags
如花女孩遭調戲不成被兇手殺死          如花, 遭調戲, 殺死, 女孩, 調戲, 兇手, 彭程程被殺案
嫩模拍糉子寫真遭紅繩捆綁 網友痛批:三俗        嫩模, 網友, 捆綁, 三俗, 糉子, 寫真
曾一鳴逆襲秀唱功驚豔 心性被指不成熟      成熟, 唱功, 驚豔, 逆襲, 曾一鳴, 心性
美國4歲男孩因好奇玩槍誤殺父親     美國, 好奇, 男孩玩槍誤殺, 男孩, 4歲男孩, 玩槍誤殺父親
LOL 搞笑時刻                        搞笑時刻, 英雄聯盟, lol
山東一高考生臨陣棄考跑去網吧打遊戲       山東, 高考生, 一高, 考生, 打遊戲, 網吧, 臨陣
  1. 第三種思想與第2種是一樣的,只不過把標籤表與映射表放到NoSQL數據庫中,如mongdb,Redis

我選擇第2種方法,因爲站點訪問量不太,Mysql建立好索引,第2種方式沒有什麼問題,如果併發大了可以換成NOSQL

分詞建立標籤庫

因爲原先庫中標籤比較亂,所以我通過對文章標題、標籤、描述進行分詞,重新建立了一套標籤庫,標籤數量在10萬條左右,然後對文章重新打上標籤
重新打過的標籤如下:

29451   如花女孩遭調戲不成被兇手殺死  如花, 遭調戲, 殺死, 女孩, 調戲, 兇手, 彭程程被殺案
29452   嫩模拍糉子寫真遭紅繩捆綁 網友痛批:三俗    嫩模, 網友, 捆綁, 三俗, 糉子, 寫真
29453   曾一鳴逆襲秀唱功驚豔 心性被指不成熟  成熟, 唱功, 驚豔, 逆襲, 曾一鳴, 心性
29454   美國4歲男孩因好奇玩槍誤殺父親 美國, 好奇, 男孩玩槍誤殺, 男孩, 4歲男孩, 玩槍誤殺父親
29455   LOL 搞笑時刻    搞笑時刻, 英雄聯盟, lol
29456   山東一高考生臨陣棄考跑去網吧打遊戲   山東, 高考生, 一高, 考生, 打遊戲, 網吧, 臨陣
29457   湖北鍾祥高考生圍堵異地監考老師 高考生, 鍾祥, 異地, 監考老師, 圍堵, 湖北
29458   LOL爆笑失誤 英雄聯盟, 爆笑失誤, lol
29459   懷孕女星向奧巴馬投毒被捕 曾演《行屍走肉》   投毒, 投毒奧巴馬, 行屍走肉女星, 行屍走肉, 奧巴馬, 女星, 被捕, 懷孕
29460   LOL搞笑視頻 :賣萌的誘餌  英雄聯盟搞笑, lol搞笑視頻, 賣萌
29461   QQ炫舞2 Tenderness 節奏-Promise qq炫舞, tenderness, promise, 節奏
29462   LOL坑爹集錦_第23期 小蒼親自出境 親自, 出境, 小蒼, 英雄聯盟

考慮文章相似度因素

計算兩篇文章相似度的因素在我的應用中,我認爲主要有三個:標籤、分類、時間
1. 標籤
標籤相同自然文章比較相關,所以標籤是重要的一個因素,所以標籤在相似度計算中權重要大一些,比如一篇文章 標籤完全相同,我計爲10,分類完全相同我計爲1,時間完全相同我計爲1,計算兩組標籤的相似度算法,在上一篇文章中有介紹。

  1. 分類
    分類相似度計算比較簡單,分類相同計爲1,不同計爲0

  2. 時間
    時間也是很重要的因素,我認爲時間相隔太遠,這種新聞它的新聞性就消失了,所有我將時間完全相同計爲1,時間相隔大於一個月,就爲0了,計算時間相似度代碼如下

    /**
     * 計算時間相似度
     * 
     * @param time1
     * @param time2
     * @return
     */
    public static double UnixTimeSmiler(Long time1, Long time2) {
        double d = (double) Math.abs(time1 - time2) / MonthSecond;
        return d > 1 ? 0 : 1 - d;
    }

計算文章相似庫

有了標籤、分類、時間三種因素後就可以計算文章間的相似度了,但是有10萬條,如果10萬與10萬遍歷計算,就需要計算100億次,本人暫時還不會大數據計算,所以這種方式不可取,我採取將數據庫中標籤至少有一條標籤相同的文章進行計算,這樣每篇文章平均只需要與200個計算,總共計算2億次,數量不多,10萬條只需要幾個小時就算好了,然後對算好的按得分排序,就得到相關新聞了

結果展示

如下爲文章id=22004的相關文章結果,總共有2000多條,以下前幾條

 id     v_id     r_id     sore
329182  22004   21948   5.447735589921648
329199  22004   22011   5.442327017616469
329202  22004   22017   5.442047310826345
329184  22004   21954   5.440337820085604
329198  22004   22008   5.265800752723249
329183  22004   21950   5.263486709513373
329190  22004   21965   5.112192150102882
329189  22004   21961   5.11200580751029
329170  22004   21878   5.108163214917697
329186  22004   21958   4.979295111975028
329178  22004   21896   4.976424741604658
329612  22004   21966   4.925942888598685
329193  22004   22002   4.86436690356514
329175  22004   21884   4.858905483812053
329203  22004   22019   4.759566635517565
329191  22004   21967   4.758552360826207
329618  22004   22889   4.57655491715546
329201  22004   22016   4.448931486610339
329187  22004   21959   4.333413884953704
329172  22004   21880   4.329758020756174
329169  22004   21877   4.329617974459877
329200  22004   22014   4.308936570585663
329678  22004   21860   4.296562342190602
329176  22004   21885   4.230563733672629
329173  22004   21881   4.230374304660284
329171  22004   21879   4.230281326265222
329669  22004   21687   4.22662561379554
329192  22004   21978   4.1069833320875615
329649  22004   21953   4.105824767272747
329645  22004   21900   3.9469861026871893
329658  22004   21865   3.9419834020699054

下圖爲相關新聞的內容,可以看出新聞的相關性還是很大了,基本滿足相關新聞推薦需求,相關新聞的時間也是比較相近的
這裏寫圖片描述

雅安地震 上海車展爲雅安捐款100萬 美女車模現場祈福 |   民生  |   雅安地震, 100萬, 捐款, 雅安廬山地震, 現場, 雅安, 美女祈福, 祈福, 上海車展, 最新消息, 美女車模  |   2013-04-22 22:14:39
【雅安地震】90後大學生在雅安 做志願者牽掛父母    |   民生  |   牽掛, 現場, 生在, 四川雅安, 志願者, 支援, 最新消息, 雅安地震, 大學, 90後, 雅安, 父母, 廬山地震    |   2013-04-22 22:26:41
雅安地震 好室友 一人救出6臺電腦3臺單反1只小龜   |   微視頻 |   雅安地震, 電腦, 單反, 一人, 現場, 救出, 四川雅安, 支援, 最新消息, 蘆山地震, 室友, 地震好室友   |   2013-04-22 22:50:39
雅安地震 陳光標攜30萬災區發現金 網友標哥正能量作秀也支持  |   微視頻 |   萬發, 現場, 四川雅安地震, 最新消息, 30萬, 蘆山地震, 現金, 雅安地震, 災區, 網友, 正能量, 陳光標, 陳光標發現金, 支持 |   2013-04-23 00:34:38
雅安地震已安置受災羣衆17.1萬人   |   微視頻 |   雅安地震, 雅安志願者, 現場, 四川雅安地震, 受災羣衆, 支援, 萬人, 最新消息, 廬山地震, 安置   |   2013-04-23 00:38:38
雅安地震災區暫無水質污染報告  |   微視頻 |   暫無, 現場, 地震災區, 雅安, 四川雅安地震, 水質污染, 報告, 最新消息, 廬山地震  |   2013-04-23 00:46:39
雅安地震最新消息 成都志願者全媒體平臺啓動   |   微視頻 |   雅安地震, 成都, 啓動, 雅安志願者, 現場, 全媒體, 平臺, 四川雅安地震, 志願者, 支援, 最新消息, 廬山地震   |   2013-04-23 00:54:39
雅安地震:安徽人民伸援手 捐款捐物送災區    |   微視頻 |   雅安地震, 災區, 捐款捐物, 現場, 四川, 支援, 伸援手, 廬山地震, 最新消息, 人民, 安徽 |   2013-04-23 00:56:38
關注雅安地震救援行動 5位創傷科專家趕赴現場  |   民生  |   雅安地震, 創傷, 現場, 四川, 支援, 專家, 最新消息, 蘆山地震, 行動, 關注, 救援    |   2013-04-23 01:00:39
雅安地震 蘆山縣7.0級地震美專家認爲雅安地震爲汶川地震餘震  |   民生  |   雅安地震, 蘆山縣, 餘震, 現場, 認爲, 汶川地震, 四川雅安地震, 美專家, 廬山地震, 最新消息, 地震    |   2013-04-23 01:08:42
四川雅安地震背後的警示 |   民生  |   雅安地震, 警示, 四川雅安地震, 四川, 廬山地震, 最新消息, 背後    |   2013-04-23 01:10:42
視頻 李總理握傷員手稱政府會管醫藥費不用擔心  |   民生  |   救災, 現場, 總理, 四川雅安地震, 手稱, 支援, 最新消息, 蘆山地震, 醫藥費, 政府, 不用, 擔心, 視頻, 傷員 |   2013-04-23 01:12:45
四川雅安地震 成都空軍頻繁出動戰機 架起“寶興孤島”空中生命線 |   微視頻 |   頻繁, 出動, 現場, 四川雅安地震, 支援, 最新消息, 蘆山地震, 架起, 寶興孤島, 成都空軍, 戰機, 生命, 空中  |   2013-04-23 02:22:37
雅安地震 雅安治安村附近山體出現裂縫 面臨滑坡危險   |   微視頻 |   面臨, 治安, 現場, 四川雅安地震, 山體, 裂縫, 最新消息, 蘆山地震, 雅安地震, 危險, 雅安, 出現, 滑坡, 裂縫滑坡, 附近  |   2013-04-23 02:26:37
四川雅安地震 嬰兒地震喪母 志願者哺乳獲贊“最美媽媽” |   微視頻 |   嬰兒, 最美媽媽, 哺乳, 現場, 四川雅安地震, 志願者, 支援, 最新消息, 蘆山地震, 地震   |   2013-04-23 02:34:38
雅安震區有降水 需防次生災害  |   微視頻 |   震區, 現場, 降水, 雅安, 四川雅安地震, 支援, 廬山地震, 最新消息, 次生災害    |   2013-04-23 02:40:39
四川雅安地震 蘆山縣災民安置點的最新消息    |   微視頻 |   蘆山縣, 安置點, 現場, 四川雅安地震, 支援, 最新消息, 廬山地震, 最新災情, 災民, 救援  |   2013-04-23 02:50:44
雅安小男孩搶鏡唱歌向外婆報平安 |   民生  |   搶鏡唱歌, 現場, 唱歌報平安, 向外婆, 四川雅安地震, 最新消息, 蘆山地震, 雅安小男孩, 平安 |   2013-04-23 02:52:44
四川寶興一中學雅安地震後成廢墟 系汶川地震後重建    |   民生  |   現場, 四川雅安地震, 四川, 後成, 支援, 汶川, 最新消息, 廢墟, 地震後, 中學, 雅安地震, 寶興中學, 寶興, 重建   |   2013-04-23 02:56:40
四川全省爲蘆山地震遇難者默哀3分鐘   |   微視頻 |   雅安地震, 全省, 3分鐘, 四川雅安地震, 四川, 蘆山地震, 默哀, 遇難者    |   2013-04-27 23:07:31
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章