1、项目介绍

技术栈:
Python语言、Django框架、requests爬虫模块、网易头条新闻、 itemBasedCF 基于物品协同过滤推荐算法

新闻信息展示:通过Django框架把爬取的数据信息展示在系统首页。按新闻分类、条件筛选新闻信息:在系统首页提供根据条件筛选新闻的功能;新闻详情页展示:用户通过点击首页新闻进入新闻详情页,并在浏览表中记录用户uid、新闻nid、浏览次数。
新闻收藏:用户通过点击新闻栏中的心形按键实现新闻的收藏,收藏表记录收藏新闻用户uid、新闻nid。
新闻搜索:用户通过点击进入搜索页面,输入关键字来对新闻进行搜索。
用户注册登陆:用户可以通过用户名,密码,手机号注册,同一手机号无法重复注册,正确输入账号密码可以登陆到新闻推荐系统。
用户信息修改:可重置密码、手机号信息。
新闻推荐:根据用户新闻收藏和浏览信息,系统通过协同过滤算法计算用户偏好,并以此进行新闻的推荐。

在这里插入图片描述

2、项目界面

(1)不同类型新闻浏览

在这里插入图片描述

(2)新闻详情页
在这里插入图片描述

(3)注册登录界面
在这里插入图片描述

(4)新闻推荐

在这里插入图片描述

(5)后台数据管理

在这里插入图片描述

3、项目说明

在很多领域,推荐系统近些年被广泛运用于向用户推荐符合其兴趣偏好的信息服务或内容,是解决当今信息超载问题的有效方法。基于网络爬虫技术和推荐算法实现的基于协同过滤推荐算法的新闻推荐系统,通过研究和对比用户的兴趣偏好进行个性化的计算,由系统发现用户的兴趣点,从而引导用户发现自己的信息需求,让推荐系统和用户之间建立密切关系,让用户对推荐系统产生依赖。本新闻推荐系统可以有效提高新闻效率和新闻匹配度,通过用户的浏览记录和收藏列表为用户定向推荐与其需求相似的新闻。本文系统基于Python3语言开发环境,通过requests爬虫框架爬取新闻网站相关新闻信息并对其进行存储、清洗,后端存储在MySQL数据库,采用Django框架以web界面的方式为用户提供了新闻信息浏览查看功能、新闻阅读、新闻收藏以及新闻查询、新闻采集功能,并且基于协同过滤推荐算法把新闻信息定向推荐给用户。

关键词:新闻信息推荐;Python;数据爬虫;协同过滤推荐算法

  1. 前台页面模块及用户功能:分为游客登录与用户登录两种登录状态,已登录用户可以查看首页、推荐页、热点新闻、个人中心,未登录访客只能可以看到首页、热点新闻。已登录用户包含的具体功能有:注册、登录、注销、信息修改、密码修改、新闻评论、新闻浏览记录查看、热点推荐查看、个性化推荐新闻查看等功能。未登录用户包含的具体功能有:注册、登录、首页中热点新闻推荐查看等功能。
  2. 后台数据管理模块:管理员可登录后台管理系统,具体功能有:用户管理、新闻管理、评论管理、浏览记录管理等。
  3. 数据获取模块:利用python网络爬虫,抓取相关新闻网站的新闻资源,包括新闻标题、发布时间、发布内容等。然后使用JieBa库进行中文分词、计算分词的TF-IDF值,得到相应关键字写入数据库中。
  4. 新闻推荐模块:用户在注册时需要选择标签,计算新闻关键词与用户选择标签的相似度,相似度高者推荐给用户。显示在推荐页面内供用户浏览。

在这里插入图片描述

新闻信息展示:通过Django框架把爬取的数据信息展示在系统首页。按新闻分类、条件筛选新闻信息:在系统首页提供根据条件筛选新闻的功能;新闻详情页展示:用户通过点击首页新闻进入新闻详情页,并在浏览表中记录用户uid、新闻nid、浏览次数。
新闻收藏:用户通过点击新闻栏中的心形按键实现新闻的收藏,收藏表记录收藏新闻用户uid、新闻nid。
新闻搜索:用户通过点击进入搜索页面,输入关键字来对新闻进行搜索。
用户注册登陆:用户可以通过用户名,密码,手机号注册,同一手机号无法重复注册,正确输入账号密码可以登陆到新闻推荐系统。
用户信息修改:可重置密码、手机号信息。
新闻推荐:根据用户新闻收藏和浏览信息,系统通过协同过滤算法计算用户偏好,并以此进行新闻的推荐。

4、核心代码


#!/usr/bin/env python
#-*-coding:utf-8-*-

import math
import pdb

class KNN:
    def __init__(self,train):
        self.train =  train
        
    # def readData(self):
    #     #读取文件,并生成用户-物品的评分表和测试集
    #     self.train = dict()
    #     #用户-物品的评分表
    #     for line in open(self.train_file):
    #         user,score,item = line.strip().split(",")
    #         self.train.setdefault(user,{})
    #         self.train[user][item] = int(float(score))

    def ItemSimilarity(self):
        #建立物品-物品的共现矩阵
        cooccur = dict()  #物品-物品的共现矩阵
        buy = dict()  #物品被多少个不同用户购买N
        for user,items in self.train.items():
            for i in items.keys():
                buy.setdefault(i,0)
                buy[i] += 1
                cooccur.setdefault(i,{})
                for j in items.keys():
                    if i == j : continue
                    cooccur[i].setdefault(j,0)
                    cooccur[i][j] += 1
        #计算相似度矩阵
        self.similar = dict()
        for i,related_items in cooccur.items():
            self.similar.setdefault(i,{})
            for j,cij in related_items.items():
                self.similar[i][j] = cij / (math.sqrt(buy[i] * buy[j]))
        return self.similar

    #给用户user推荐,前K个相关用户,前N个物品
    def Recommend(self,user,K=10,N=10):
        rank = dict()
        action_item = self.train[user]     
        #用户user产生过行为的item和评分
        for item,score in action_item.items():
            sortedItems = sorted(self.similar[item].items(),key=lambda x:x[1],reverse=True)[0:K]
            for j,wj in sortedItems:
                if j in action_item.keys():
                    continue
                rank.setdefault(j,0)
                rank[j] += score * wj
        return dict(sorted(rank.items(),key=lambda x:x[1],reverse=True)[0:N])

5、源码获取方式

🍅由于篇幅限制,获取完整文章或源码、代做项目的,查看我的【用户名】、【专栏名称】、【顶部选题链接】就可以找到我啦🍅

感兴趣的可以先收藏起来,点赞、关注不迷路,下方查看👇🏻获取联系方式👇🏻

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐