天天看點

推薦系統筆記——推薦引擎之實作符合業務場景的推薦算法(四)

三大推薦引擎

電商推薦、内容推薦、社交推薦

建構一個内容推薦引擎

建構一個内容推薦引擎要考慮:

  1. 場景:小說網站、缺乏營運
  2. 使用習慣:重度使用者
  3. 搭建推薦推薦引擎:(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,再替換原檔案即可。

推薦系統筆記——推薦引擎之實作符合業務場景的推薦算法(四)

繼續閱讀