三大推薦引擎
電商推薦、内容推薦、社交推薦
建構一個内容推薦引擎
建構一個内容推薦引擎要考慮:
- 場景:小說網站、缺乏營運
- 使用習慣:重度使用者
- 搭建推薦推薦引擎:(1)分詞工具(2)設計流程子產品(3)coding(4)實時打分 real time ranking
流程子產品:資料預處理 ---> 生成索引 ---> 加入引擎 ---> 接收請求 ---> 響應請求
資料準備
從網上找一些txt格式的小說作為原始資料,存儲到指定路徑,確定能被找到。
預處理
這裡要做預處理首先要用到分詞元件,我們使用結巴分詞 jieba。具體使用可參考如下部落格:https://blog.csdn.net/qq_14997473/article/details/87868832
# -*- coding: utf-8 -*-
import jieba
import string
import codecs #儲存檔案很好用,不會出現編碼問題
# 預處理
class PreFile():
def __init__(self):
file_one = open("./artical/1.txt", encoding="utf-8")
file_two = open("./artical/2.txt", encoding="utf-8")
file_three = open("./artical/3.txt", encoding="utf-8")
file_four = open("./artical/4.txt", encoding="utf-8")
rsu_1 = self.tag(file_one, 1)
self.save(rsu_1, "1")
rsu_2 = self.tag(file_two, 3)
self.save(rsu_2, "2")
rsu_3 = self.tag(file_three, 5)
self.save(rsu_3, "3")
rsu_4 = self.tag(file_four, 7)
self.save(rsu_4, "4")
def tag(self, file, count):
"""
給檔案打标簽,并隻要詞頻出現 count 次的
"""
print("object is ready")
print("================================")
result = {}
result_filter = {}
for line in file.readlines():
seg_list = jieba.cut(line.strip())
for seg in seg_list:
if seg not in result.keys():
result[seg] = 0
result[seg] += 1
for k, v in result.items():
if v <= count: continue
if k in string.punctuation: continue #去除英文标點
if k in [ " ", ",", "。","、", ";"]: continue #去除中文标點
if k in [ "你", "我", "他", "的", "和"]: continue #去除停用詞
result_filter[k] = v
for k, v in result_filter.items():
print(k + "\t" + str(v))
return result_filter
def save(self, re, fn):
"""
儲存檔案索引(檔案名字)
"""
file = codecs.open("./artical/index_cut.txt", "a", 'utf-8')
for k,v in re.items():
line = "filename: " + fn + "\t" + k + "\t" + str(v) + "\n"
file.write(line)
if __name__ == "__main__":
p = PreFile()
在使用open()函數讀取txt檔案時,程式出現了以下報錯:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc8 in position 0: invalid continuation byte
這是由windows系統下的txt檔案格式問題導緻的。将原txt檔案打開,另存為并将編碼方式修改為utf-8,再替換原檔案即可。