新聞個性化推薦系統(python)-(附原始碼 資料集)
最近參加了一個評測,是關於新聞個性化推薦。說白了就是給你一個人的瀏覽記錄,預測他下一次的瀏覽記錄。花了一週時間寫了一個整合系統,可以一鍵推薦新聞,但是準確率比較不理想,所以發到這裡希望大家加以改進。用到的分詞部分的程式碼借用的jieba分詞。資料集和程式碼在下面會給出。
資料集
一共五個欄位,以tab隔開。分別是user編號,news編號,時間編號,新聞標題,對應當前月份的日(3就是3號)。
程式碼部分
先來看下演示圖
(1)演算法說明
舉個例子簡單說明下演算法,其實也比較簡單,不妥的地方希望大家指正。我們有如下一條資料
[plain] view plaincopy
- 5738936 100649879 1394550848 MH370航班假護照乘客身份查明(更新) 11
5738936這名使用者在11號看了“MH370航班假護照乘客...”這條新聞。我們通過jieba找出11號的熱點詞如下。
[plain] view plaincopy
- 失聯 311 三週年 馬方 偷渡客 隱形 護照 吉隆坡 航班 護照者
我們發現“航班”、“護照”這兩個keywords出現在新聞裡。於是我們就推薦5738936這名使用者,11號出現“航班”、“護照”的其它新聞。同時我們對推薦集做了處理,比如說5738936瀏覽過的新聞不會出現,熱度非常低的新聞不會出現等。
(2)使用方法
整個系統採用一鍵式啟動,使用起來非常方便。首先建立一個test資料夾,然後在test裡新建三個資料夾,注意命名要和圖中的統一,因為新聞是有時效的,每一天要去分開來計算,要儲存每一天的內容做成文件。test文件如下圖,就可以自動生成。(程式碼資料夾提供了完整的test文件結構)
使用的時候,要先在Global_param.py中設定好test資料夾的路徑引數。一切設定完畢,只要找到wordSplite_test包下面的main()函式,執行程式即可。
Global_param中設定引數說明:
number_jieba:控制提取關鍵詞的數量
number_day:從第一天開始,要預測的天數
hot_rate:預測集預測的新聞熱度,數值越大熱度越高
(3)程式碼流程
首先我們從main()看起。
[python] view plaincopy
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檔案每執行一次程式要手動清空,其它檔案都是自動生成不用處理。
(本文釋出於http://blog.csdn.net/buptgshengod)