目 录
摘 要 I
Abstract II
第1章 绪论 1
1.1 研究背景 1
1.2 研究目的及意义 1
1.3 研究内容 2
1.4 论文的结构 3
1.5 本章小结 3
第2章 开发技术方案研究 4
2.1 Spring及SpringMVC框架概述 4
2.2 Scrapy框架概述 5
2.3 Mybatis框架概述 6
2.5 本章小结 7
第3章 系统分析与设计 8
3.1 系统的可行性分析 8
3.1.1 经济可行性分析 8
3.1.2 技术可行性分析 8
3.2 系统开发环境 8
3.3 系统需求分析 9
3.3.1系统整体需求概述 9
3.4 系统功能设计 19
3.4.1 总体功能设计 19
3.4.2 系统主要功能设计 22
3.5 数据库的分析与设计 26
3.5.1 数据库概念结构设计 26
3.5.2 数据库逻辑结构设计 28
3.5.3 数据库实施 32
3.6 类的设计 34
3.7 本章小结 35
第4章 系统的实现 36
4.1 资讯阅读功能的实现 36
4.1.1查看新闻列表功能的实现 36
4.1.2查看新闻详情功能的实现 37
4.1.3查看视频列表功能的实现 37
4.1.4查看视频详情功能的实现 38
4.1.5查看图册列表功能的实现 39
4.1.6查看图册详情功能的实现 40
4.1.7查询资讯功能的实现 41
4.2收藏点赞功能的实现 41
4.3评论回复功能的实现 43
4.4资讯分享功能的实现 44
4.5浏览历史和系统通知功能的实现 45
4.6读者个人信息的查看和修改功能的实现 45
4.7资讯管理功能 46
4.7.1新闻查询的实现 46
4.7.2新闻自定义功能的实现 47
4.7.3新闻编辑功能的实现 48
4.7.4新闻发布功能的实现 49
4.7.5视频发布功能的实现 50
4.8评论公告管理功能实现 51
4.8.1评论管理功能的实现 51
4.8.2发布通知管理功能的实现 51
4.8.3通知管理功能的实现 52
4.9读者管理功能实现 53
4.9.1查询读者功能的实现 53
4.9.2查看读者详细信息功能的实现 53
4.9.3设置读者类型的实现 54
4.10推荐功能实现 54
4.10.1读者查看推荐的实现 54
4.10.2设置推荐的实现 55
4.10.3查询推荐功能的实现 56
4.11 本章小结 57
第5章 结论与展望 58
5.1 本课题的主要工作及结论 58
5.2 有待进一步研究的问题 58
5.2.1 存在的不足 58
5.2.2 改进方案 58
致 谢 60
参考文献 61
1.3 研究内容
本毕业论文的主要研究内容包括以下几个重点:
- 新闻数据获取与处理:通过Python爬虫技术从各大新闻网站抓取新闻数据,并进行数据清洗、去重和格式化处理,以建立准确、完整的新闻数据集。
- 用户画像构建与分析:基于用户的历史浏览记录、兴趣标签等信息,利用机器学习和数据挖掘技术,构建用户画像模型,深入了解用户的兴趣爱好、倾向性以及偏好,为后续的个性化推荐提供基础。
- 个性化新闻推荐算法设计与实现:结合用户画像和新闻内容特征,采用基于内容的推荐算法和协同过滤算法等,设计和实现一个有效的个性化推荐系统。通过分析用户的偏好和行为模式,将相关性较高的新闻推荐给用户,以提升用户阅读体验和满足其信息需求。
- 后台管理系统的设计与开发:采用Layui进行前端开发,利用其丰富的UI组件和响应式布局,设计一个友好易用的后台管理系统界面。管理员可以通过该系统对新闻数据进行管理、编辑和发布,实现对推荐系统的灵活控制和维护。
- 前端部分的开发与优化:利用MUI结合Vue.js进行前端开发,设计一个用户界面友好、交互体验良好的资讯新闻APP。通过优化页面加载速度、提升用户操作的响应性等手段,提高用户对新闻内容的感知质量和满意度。
通过以上研究内容的探索和实践,本论文旨在解决传统新闻阅读方式无法满足用户个性化需求的问题,提出了一种基于用户需求的个性化新闻推荐系统的设计与实现方案,并通过实验验证其有效性和可行性。期望能为新闻媒体机构和用户提供更加智能、精准的新闻推荐服务。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1, user-scalable=no , viewport-fit=cover">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<link rel="stylesheet" href="css/mui.min.css">
<link rel="stylesheet" href="css/icons-extra.css">
<style type="text/css">
body {background-color: #efeff4;}
.mui-bar-tab .mui-tab-item.mui-active {color: #444444;}
.mui-title{color:#454545;font-weight: 450;}
* { touch-action: pan-y; }
</style>
</head>
<body>
<nav class="mui-bar mui-bar-tab ">
<a id="defaultTab" class="mui-tab-item mui-active" href="www/news/newsIndex.html">
<span class="mui-icon-extra mui-icon-extra-new" ></span>
<span class="mui-tab-label">新闻</span>
</a>
<a class="mui-tab-item" href="www/video/videoIndex.html">
<span class=" mui-icon mui-icon-videocam"></span>
<span class="mui-tab-label">视频</span>
</a>
<a class="mui-tab-item" href= "www/pics/picsIndex.html">
<span class="mui-icon mui-icon-image" ></span>
<span class="mui-tab-label">图册</span>
</a>
<a class="mui-tab-item" id="page_login" href= "www/me/my.html">
<span class="mui-icon mui-icon-home" ></span>
<span class="mui-tab-label">个人中心</span>
</a>
</nav>
<script src="js/mui.min.js"></script>
<script>
mui.init();
//子页面数组
var subpages = ['www/news/newsIndex.html', 'www/video/videoIndex.html', 'www/pics/picsIndex.html',"www/me/my.html"];
//设置页面样式
function navigationBarStyle(index){
var subpage_style = {top: '0px',bottom: '51px'};
return subpage_style;
}
var aniShow = {};
mui.plusReady(function() {
var h = plus.nativeUI.showWaiting();
plus.navigator.setFullscreen(false);
var self = plus.webview.currentWebview();
for (var i = 0; i < 4; i++) {
var subpage = subpages[i];
var suff = subpage.indexOf('.');
var objectName = subpage.substring(0,suff);
var _style = navigationBarStyle(i);
var sub = plus.webview.create(subpages[i],objectName,_style);
if (i > 0) {
sub.hide();
}
self.append(sub);
}
setTimeout(function(){
h.close();
},1500);
});
var activeTab = subpages[0];
mui('.mui-bar-tab').on('tap', 'a', function(e) {
var targetTab = this.getAttribute('href');
if (targetTab == activeTab)return;
var suff = targetTab.indexOf('.');
targetTab = targetTab.substring(0,suff);
plus.webview.show(targetTab);
plus.webview.hide(activeTab);
activeTab = targetTab+'.html';
});
//自定义事件,模拟点击“首页选项卡”
document.addEventListener('gohome', function() {
var defaultTab = document.getElementById("defaultTab");
//模拟首页点击
mui.trigger(defaultTab, 'tap');
var current = document.querySelector(".mui-bar-tab>.mui-tab-item.mui-active");
if (defaultTab !== current) {
current.classList.remove('mui-active');
defaultTab.classList.add('mui-active');
}
});
</script>
</body>
</html>