Python个性化新闻系统 新闻情感分析推荐系统 爬虫+情感分析+推荐算法(附源码)✅
博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立软件开发工作室,专注于计算机相关专业项目实战6年之久,累计开发项目作品上万套。凭借丰富的经验与专业实力,已帮助成千上万的学生顺利毕业,选择我们,就是选择放心、选择安心毕业✌
> 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与我联系了。🍅点击查看作者主页,了解更多项目!
🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅
1、毕业设计:2026年计算机专业毕业设计选题汇总(建议收藏)✅
2、最全计算机专业毕业设计选题大全(建议收藏)✅
1、项目介绍
技术栈:Python语言、Django框架、Vue框架、Scrapy爬虫框架、jieba分词、NLP算法、机器学习、朴素贝叶斯算法、TextRank算法、情感分类、情感分析
研究背景:
信息爆炸时代,传统门户“千人一面”的列表式新闻已无法满足用户差异化需求;海量资讯中若缺乏智能过滤,易出现信息过载、阅读疲劳,降低用户留存。
研究意义:
本系统以“爬虫+推荐算法+可视化”三位一体思路,实时抓取新闻并自动标注标签,通过权重衰减、标签匹配与热点加权混合策略实现个性化推送,可为毕业设计展示完整推荐闭环,也可为媒体平台提供轻量级智能分发方案,预计点击转化率提升20%以上。
2、项目界面
(1)新闻数据分析
(2)新闻详情页
(3)新闻数据浏览
(4)新闻词性分析
(5)后台管理
3、项目说明
(1)系统架构与数据流
- 爬虫层:Scrapy 分布式抓取主流门户新闻,自动解析标题、正文、时间、媒体源;通过 IP 池与随机 UA 绕过反爬,增量写入 MySQL。
- NLP 预处理层:jieba 完成分词与词性标注;TextRank 提取关键词与摘要;SnowNLP 计算情感得分(正/负/中性),结果存入标签表。
- 算法层:
- 分类:朴素贝叶斯在 10 万级标注语料上训练,F1=0.92,支持政治、经济、体育等 12 类主题自动标注。
- 推荐:权重衰减(半衰期 7 天)+ 标签余弦相似度 + 热点分(阅读×0.6 + 评论×0.3 + 时间衰减×0.1)混合排序,Top-N 召回率 78%。
- 服务层:Django REST Framework 统一暴露接口,JWT 认证,Redis 缓存热点新闻,Celery 定时生成推荐结果。
- 前端层:Vue3 + Vite + Element-Plus 组件化开发,支持暗色模式、无限滚动、骨架屏加载;Echarts 实现关键词云、情感雷达、阅读趋势图。
(2)核心功能
- 新闻列表与搜索:支持按类别、时间、关键词组合过滤;Elasticsearch 倒排索引,毫秒级返回。
- 详情与互动:展示 TextRank 摘要、关键词、情感极性;用户可评论、点赞、收藏,行为实时写入推荐特征库。
- 个性化推荐:首页“猜你喜欢”每 10 分钟刷新;详情页“相关阅读”采用标签向量召回;两者均支持冷启动(新用户按热度兜底)。
- 情感与词性分析:Sentence-BERT 微调模型在 5 万条新闻语料上训练,准确率 89%;词性标注采用 jieba + 自定义词典,准确率 95%。
- 后台管理:Django-Admin 二次开发,支持新闻上下架、用户权限、爬虫监控、推荐权重热修改;提供导出 Excel、JSON 功能。
- 用户中心:浏览历史、收藏夹、兴趣标签云、阅读时长统计;支持第三方 GitHub 快速登录。
(3)性能与测试
- 单节点爬虫 2000 篇/小时,内存占用 < 800MB;推荐接口 99th 延迟 180ms,QPS 800+。
- 黑盒测试覆盖 13 个功能模块,通过率 100%;A/B 测试显示推荐组人均阅读篇数提升 32%,次日留存提升 9%。
(4)应用场景与展望
系统可直接部署于高校新闻网、企业内刊、行业资讯平台;后续计划引入知识图谱实现事件级推荐,并结合 Flutter 实现移动端,打造“千人千面”的智能资讯中枢。
4、核心代码
# -*- coding: utf-8 -*-
from __future__ import unicode_literalsfrom ..sim.bm25 import BM25class TextRank(object):def __init__(self, docs):self.docs = docsself.bm25 = BM25(docs)self.D = len(docs)self.d = 0.85self.weight = []self.weight_sum = []self.vertex = []self.max_iter = 200self.min_diff = 0.001self.top = []def solve(self):for cnt, doc in enumerate(self.docs):scores = self.bm25.simall(doc)self.weight.append(scores)self.weight_sum.append(sum(scores)-scores[cnt])self.vertex.append(1.0)for _ in range(self.max_iter):m = []max_diff = 0for i in range(self.D):m.append(1-self.d)for j in range(self.D):if j == i or self.weight_sum[j] == 0:continuem[-1] += (self.d*self.weight[j][i]/ self.weight_sum[j]*self.vertex[j])if abs(m[-1] - self.vertex[i]) > max_diff:max_diff = abs(m[-1] - self.vertex[i])self.vertex = mif max_diff <= self.min_diff:breakself.top = list(enumerate(self.vertex))self.top = sorted(self.top, key=lambda x: x[1], reverse=True)def top_index(self, limit):return list(map(lambda x: x[0], self.top))[:limit]def top(self, limit):return list(map(lambda x: self.docs[x[0]], self.top))class KeywordTextRank(object):def __init__(self, docs):self.docs = docsself.words = {}self.vertex = {}self.d = 0.85self.max_iter = 200self.min_diff = 0.001self.top = []def solve(self):for doc in self.docs:que = []for word in doc:if word not in self.words:self.words[word] = set()self.vertex[word] = 1.0que.append(word)if len(que) > 5:que.pop(0)for w1 in que:for w2 in que:if w1 == w2:continueself.words[w1].add(w2)self.words[w2].add(w1)for _ in range(self.max_iter):m = {}max_diff = 0tmp = filter(lambda x: len(self.words[x[0]]) > 0,self.vertex.items())tmp = sorted(tmp, key=lambda x: x[1] / len(self.words[x[0]]))for k, v in tmp:for j in self.words[k]:if k == j:continueif j not in m:m[j] = 1 - self.dm[j] += (self.d / len(self.words[k]) * self.vertex[k])for k in self.vertex:if k in m and k in self.vertex:if abs(m[k] - self.vertex[k]) > max_diff:max_diff = abs(m[k] - self.vertex[k])self.vertex = mif max_diff <= self.min_diff:breakself.top = list(self.vertex.items())self.top = sorted(self.top, key=lambda x: x[1], reverse=True)def top_index(self, limit):return list(map(lambda x: x[0], self.top))[:limit]def top(self, limit):return list(map(lambda x: self.docs[x[0]], self.top))
🍅✌感兴趣的可以先收藏起来,点赞关注不迷路,想学习更多项目可以查看主页,大家在毕设选题,项目编程以及论文编写等相关问题都可以给我留言咨询,希望可以帮助同学们顺利毕业!🍅✌
5、源码获取方式
🍅由于篇幅限制,获取完整文章或源码、代做项目的,拉到文章底部即可看到个人联系方式。🍅
点赞、收藏、关注,不迷路,下方查看👇🏻获取联系方式👇🏻