新聞個性化推薦系統(python)-(附原始碼 資料集)

李博Garvin發表於2014-09-25

1.背景


       最近參加了一個評測,是關於新聞個性化推薦。說白了就是給你一個人的瀏覽記錄,預測他下一次的瀏覽記錄。花了一週時間寫了一個整合系統,可以一鍵推薦新聞,但是準確率比較不理想,所以發到這裡希望大家給與一些建議。用到的分詞部分的程式碼借用的jieba分詞。資料集和程式碼在下面會給出。

2.資料集




一共五個欄位,以tab隔開。分別是user編號,news編號,時間編號,新聞標題,對應當前月份的日(3就是3號)

3.程式碼部分


先來看下演示圖  


     (1)演算法說明

    
     舉個例子簡單說明下演算法,其實也比較簡單,不妥的地方希望大家指正。我們有如下一條資料
5738936	100649879	1394550848	MH370航班假護照乘客身份查明(更新)	11

       5738936這名使用者在11號看了“MH370航班假護照乘客...”這條新聞。我們通過jieba找出11號的熱點詞如下。

失聯	311	三週年	馬方	偷渡客	隱形	護照	吉隆坡	航班	護照者	

       我們發現“航班”、“護照”這兩個keywords出現在新聞裡。於是我們就推薦5738936這名使用者,11號出現“航班”、“護照”的其它新聞。同時我們對推薦集做了處理,比如說5738936瀏覽過的新聞不會出現,熱度非常低的新聞不會出現等。


 (2)使用方法

  
      整個系統採用一鍵式啟動,使用起來非常方便。首先建立一個test資料夾,然後在test裡新建三個資料夾,注意命名要和圖中的統一,因為新聞是有時效的,每一天要去分開來計算,要儲存每一天的內容做成文件。test文件如下圖,就可以自動生成。(下面的github連結提供了完整的test文件結構)


使用的時候,要先在Global_param.py中設定好test資料夾的路徑引數。一切設定完畢,只要找到wordSplite_test包下面的main()函式,執行程式即可。

Global_param中設定引數說明:
      number_jieba:控制提取關鍵詞的數量
      number_day:從第一天開始,要預測的天數
      hot_rate:預測集預測的新聞熱度,數值越大熱度越高

(3)程式碼流程


     首先我們從main()看起。
import Get_day_data
import Get_keywords
import Get_keynews
import Delete_Repeat
import Get_hot_result
import Global_param
def main():
    for i in range(1,Global_param.number_day):
        Get_day_data.TransforData(i)
        Get_day_data.TransforDataset(i)
        Get_keywords.Get_keywords(i)
        Get_keynews.Get_keynews(i)
    Delete_Repeat.Delete_Repeat()
    Get_hot_result.get_hot_result(Global_param.hot_rate)

main()    

    1.首先Get_day_data.TransforData(i)函式,找到最後一次瀏覽的是第i天的新聞的使用者行為,存放在test/train_lastday_set目錄下。

   2.Get_day_data.TransforDataset(i)函式,區分每一天的新聞,存放在test/train_date_set1目錄下

   3.Get_keywords.Get_keywords(i)函式,呼叫jieba庫,挑出每一天最火的keywords,存放在test/key_words下

   4.Get_keynews.Get_keynews(i)函式,通過每一個使用者最後一次瀏覽的新聞,比對看有沒有出現當天的熱門keywords。如果出現,就推薦當天包含這個keywords的其它新聞。迴圈Global_param.number_day天,生成test/result.txt檔案

   5. Delete_Repeat.Delete_Repeat()函式,去除result中的重複項,生成test/result_no_repeat.txt

   6.Get_hot_result.get_hot_result(Global_param.hot_rate)函式,因為上面生成的result_no_repeat函式可能出現,每個使用者推薦過多的情況,影響準確率。所以用這個函式控制數量,每個使用者只推薦新聞熱度相對高的候選項。最終結果集
test/result_no_repeat_hot.txt


注意:test下的result.txt檔案每執行一次程式要手動清空,其它檔案都是自動生成不用處理。
專案地址:https://github.com/X-Brain/News-Recommend-System(src資料夾下是程式碼,test下是資料、和文件結構)

希望大家有什麼建議,可以在部落格留言,或者在github上發issue,希望有更多的人蔘與貢獻。

/********************************

* 本文來自部落格  “李博Garvin“

* 轉載請標明出處:http://blog.csdn.net/buptgshengod

******************************************/




相關文章