python 新闻推荐系统(基于新闻内容推荐)

# -*- coding:utf-8 -*-__version__ = ‘1.0.0.0‘"""@brief  :   基于新闻的内容推荐系统@details:   详细信息@author :   zhphuang@date   :   2019-08-07"""import jieba

from pandas import *from sklearn.metrics import pairwise_distancesfrom bs4 import BeautifulSoupfrom sklearn import feature_extractionfrom sklearn.feature_extraction.text import TfidfTransformer, TfidfVectorizerfrom mysql_util import MySqlUtils

class ContentRecommend(object):

    def __init__(self):        DATABASE_CONFIG = {            "host": "127.0.0.1",            "port": 3306,            "user": "root",            "passwd": "root",            "db": "recommend",            "charset": "utf8",        }

        self.con = MySqlUtils(DATABASE_CONFIG)

        self.recommend_count = 10        self.all_count = 1000        self.reload_data()

    def reload_data(self):        corpus = []        sql = "select a.news_id,a.content,b.source_url as url from news_content as a left join news as b on a.news_id=b.news_id"        self.df = DataFrame(list(self.con.query(sql)), columns=[‘news_id‘, ‘content‘, ‘url‘])        zhPattern = re.compile(u‘[\u4e00-\u9fa5]+‘)        for index, row in self.df[0:self.all_count].iterrows():            print(index)            content = row[‘content‘]            bs = BeautifulSoup(content, "html.parser")            segments = []            segs = jieba.cut(bs.text)            for seg in segs:                if zhPattern.search(seg):                    segments.append(seg)            corpus.append(‘ ‘.join(segments))

        vectorizer = TfidfVectorizer()  # 该类会统计每个词语的tf-idf权值        tfidf = vectorizer.fit_transform(corpus)  # 第一个fit_transform是计算tf-idf,第二个fit_transform是将文本转为词频矩阵        words = vectorizer.get_feature_names()        print(len(words))        print(words)        print(vectorizer.vocabulary_)        a = tfidf.todense()        print(a)

        self.distance_matrix = pairwise_distances(            tfidf,            metric=‘cosine‘        )

    def analysis(self):        for index, item in enumerate(self.distance_matrix):            #min_value = np.min(np.delete(item, index))            #min_index = np.argmin(np.delete(item, index))            b = np.argsort(item)[1:self.recommend_count]            print("="*10 + "与%s相似的文章有:" % self.df.iloc[index, 0] + "="*10 )            for index_2 in b:                print(self.df.iloc[index_2, 0], "余弦距离:%s" % item[index_2])

    def get_similar_news_id(self, news_id):        for index, item in enumerate(self.distance_matrix):            if self.df.iloc[index, 0] == news_id:                b = np.argsort(item)[1:self.recommend_count]                print("="*10 + "与%s相似的文章有:" % self.df.iloc[index, 0] + "(链接地址:%s)" % self.df.iloc[index, 2] + "="*10 )                for index_2 in b:                    print(self.df.iloc[index_2, 0], "余弦相似度:%s" % item[index_2], "链接地址:%s" % self.df.iloc[index_2, 2])

    def get_recommend_news_by_uid(self, uid):        pass

    def input_news_id(self):        while 1:            print("输入newsId:")            news_id = input()            self.get_similar_news_id(news_id)

if __name__ == ‘__main__‘:    ContentRecommend().input_news_id()

原文地址:https://www.cnblogs.com/niuniuc/p/11314661.html

时间: 2024-11-15 00:41:07

python 新闻推荐系统(基于新闻内容推荐)的相关文章

新闻推荐系统:基于内容的推荐算法(Recommender System:Content-based Recommendation)

因为开发了一个新闻推荐系统的模块,在推荐算法这一块涉及到了基于内容的推荐算法(Content-Based Recommendation),于是借此机会,基于自己看了网上各种资料后对该分类方法的理解,用尽量清晰明了的语言,结合算法和自己开发推荐模块本身,记录下这些过程,供自己回顾,也供大家参考~ 目录 一.基于内容的推荐算法 + TFIDF 二.在推荐系统中的具体实现技巧 正文 一.基于内容的推荐算法 + TFIDF 主流推荐算法大致可分为: 基于内容(相似度)的推荐 基于用户/物品相似度的协同过

基于特征的推荐算法【转】

http://in.sdo.com/?p=2779 推荐算法准确度度量公式: 其中,R(u)表示对用户推荐的N个物品,T(u)表示用户u在测试集上喜欢的物品集合. 集合相似度度量公式(N维向量的距离度量公式): Jaccard公式: 其中,N(u)表示用户u有过正反馈的物品集合. 余弦相似度公式: UserCF公式: 其中,S(u,k)表示和用户u兴趣最接近的K个用户集合:N(i)表示对物品i有过正反馈的用户集合:w(u,v)表示用户u和用户v的兴趣相似度:r(v,i)表示用户v对物品i的兴趣.

基于KNN的相关内容推荐

如果做网站的内容运营,相关内容推荐可以帮助用户更快地寻找和发现感兴趣的信息,从而提升网站内容浏览的流畅性,进而提升网站的价值转化.相关内容 推荐最常见的两块就是“关联推荐”和“相关内容推荐”,关联推荐就是我们常说的购物篮分析,即使用购买了某商品的用户同时购买了什么这个规则来发现商品间 的潜在联系,之前有相关的文章介绍——向上营销.交叉营销与关联推荐:关联推荐是基于用户行为分析的推荐,而相关内容推荐是基于内容固有特征的推荐,只与内容本身有关,与用户的行为完全无关,所以相关内容推荐的模型是一种“冷启

基于朴素贝叶斯的内容推荐算法

论文出处: http://www.cs.utexas.edu/~ml/papers/libra-sigir-wkshp-99.pdf 引言 这篇文章里面将会详细介绍基于多项式贝叶斯的内容推荐算法的符号以及术语,公式推导以及核心思想,学习如何从文本分类的角度来实现物品推荐.详细了解算法过程后,你应该可以利用里面的公式来计算出某个用户对于单词级别的喜好强度列表(profile),根据这个强度大小来对其他物品(需先用该强度来对该物品做加权算出该物品的喜好强度)做一个推荐的排序,从而得到用户可能最喜欢的

《推荐系统》--协同过滤推荐

<Recommender System An Introduction>,第二章,协同过滤推荐. 定义 协同过滤推荐方法的主要思想是,利用已有用户群过去的行为或意见预测当前用户最可能喜欢哪些东西或对哪些东西感兴趣.此类型的推荐系统当前在业界广泛使用. 纯粹的协同方法的输入数据只有给定的用户-物品评分矩阵,输出数据一般有以下几种类型: (1)表示当前用户对物品喜欢或不喜欢程度的预测数值: (2)n项推荐物品的列表. 基于用户的最近邻推荐 主要思想 这是一种早期方法,user-based near

Python机器学习:6本机器学习书籍推荐

机器学习是实现人工智能的一种途径,它和数据开掘有一定的相似性,也是一门多领域交叉学科,触及概率论.核算学.逼近论.凸剖析.核算复杂性理论等多门学科.对比于数据开掘从大数据之间找互相特性而言,机器学习愈加注重算法的设计,让核算机可以白动地从数据中“学习”规则,并利用规则对不知道数据进行猜测.因为学习算法触及了很多的核算学理论,与核算揣度联络尤为严密. 今天为大家推荐有关机器学习的书籍: 1.<Python机器学习实践指南> Python机器学习实践指南 书籍介绍: 机器学习是近年来渐趋热门的一个

《推荐系统》--基于知识的推荐

<Recommender System An Introduction>,第四章,基于知识的推荐. 概述 协同过滤和基于内容推荐的方法的主要优势在于,可以以相对较小的代价获取和维护这些知识. 但是,在一些场景下,比如房屋.汽车.计算机等商品,协同系统会因为评分数据少而效果不好:或者时间跨度因素也很重要的情况,用户偏好随着各种状况而变化等:这些场景就不是协同过滤和基于内容推荐擅长解决的. 基于知识的推荐系统可以解决这些问题,它不需要评分数据,因此不存在启动问题.基于知识推荐交互性很强,所以是一种

Python:使用基于事件驱动的SAX解析XML

SAX的特点: 是基于事件的 API 在一个比 DOM 低的级别上操作 为您提供比 DOM 更多的控制 几乎总是比 DOM 更有效率 但不幸的是,需要比 DOM 更多的工作 基于对象和基于事件的接口 您可能已经知道语法分析器有两类接口 - 基于对象的(如:DOM)和基于事件(如:SAX)的接口. DOM是基于对象的语法分析器的标准 API. 作为基于对象的接口,DOM 通过在内存中显示地构建对象树来与应用程序通信.对象树是 XML 文件中元素树的精确映射. DOM 易于学习和使用,因为它与基本

twisted是python实现的基于事件驱动的异步网络通信构架。

网:https://twistedmatrix.com/trac/ http://www.cnblogs.com/wy-wangyan/p/5252271.html What is Twisted? Twisted is an event-driven networking engine written in Python and licensed under the open source ?MIT license. Twisted runs on Python 2 and an ever g