基于用户兴趣模型的个性化新闻推荐系统

Download Report

Transcript 基于用户兴趣模型的个性化新闻推荐系统

2012届本科毕业设计
• 项目名称:基于用户兴趣模型的个性化新闻推荐
系统
• 使用技术:Struts+Spring+Hibernate+Ajax等
• 设计人员:杨勇智
• 专业:计算机科学与技术(软件工程方向)
• 班级:2008级2班
• 指导老师:蒲国林
毕业设计项目
基于用户兴趣模型的个性化新闻推荐系统
答 辩 人:杨勇智
指导教师:蒲国林
2012-05-26
主要内容
1 项目背景及意义
2 项目分析
3 项目实现
4 项目总结
1 项目背景及意义
2 项目分析
3 项目实现
4 项目总结
2 项目分析
3 项目实现
4 项目总结
当下信息大量增加,人们通过互联网获取信息也更加普遍。但是
人们通过搜索或者浏览网站,获取到的很多信息是自己不感兴趣的。
通过这种方式用户获取感兴趣的信息是非常低效的。
个性化服务主要是针对不同用户提供不同的服务,用户的个性化
服务又建立在用户的特征信息之上,即用户兴趣模型。通过个性化服
务可以过滤用户不感兴趣的新闻,增强用户体验。本系统通过良好的
新闻自动分类,结合用户的行为和习惯,建立高效用户的兴趣模型,
以实现对用户进行个性化新闻推荐。同时本系统使用当前流行的J2EE
轻量级框架SSHA(Struts + Spring + Hibernate + AJAX)对系统进行
开发。
2 项目分析
3 项目实现
4 项目总结
国内外对用户兴趣模型、个性化推荐的研究虽然以有很多,但是对于
个性化推荐的服务的准确只有个别的系统能够满足用户的需求,尤其是国
内对于个性化推荐的研究比较少。因此本系统针对用户的兴趣建模,以用
户的兴趣模型为基础对信息和服务进行相应的类别划分,最后通过对用户
的兴趣模型分析提供给用户个性化的推荐。
同时使用当前流行SSHA(Struts+Spring+Hibernate+Ajax)框架技术
来对本系统进行综合性的设计和实现。目的在于能让基于用户兴趣模型的
个性化推荐信息更加高效,准确。对于用户而言能够获得自己感兴趣的信
息和服务,才能获得良好的用户体验,以使资源能得到很好的传播。
1项目背景及意义
2 项目分析
3 项目实现
4项目总结
用户交互层
兴趣模型层
记录用户行为
用户反馈
兴趣发现
推荐信息
模型建立
模型更新
新闻分类
分词
提取关键词
资源
语义处理层
1 项目背景及意义
2 项目分析
3 项目实现
4 项目总结
MyEclipse 6.5,MySql,JDK,Dreamwaver,Photoshop
Struts-1.3.10,Spring,Hibernate3,Jquery-1.4.1
中科院分词程序: ICTCLAS ,网页分析工具:HTMLParser
1 项目背景及意义
2 课题总结 4 项目实现
3 项目实现
利用中科院的开源项目: ICTCLAS。能够准确的分出中文
词汇并表明词性 。
中
文
分
词
本系统利用该程序进行网页内容特征词汇的提取,提取
结果如下:
分词之后根据统计算法统计出该次在该文章中
的比例,即为该词汇的权重
1 项目背景及意义
2 课题总结 4 项目实现
3 项目实现
网
页
抓
取
本系统的新闻主要是抓取新浪的新闻,抓取主要通过HTMLParser
编写网页爬虫,然后通过获取所有链接,然后过滤链接,得所有当天新
闻。再通过HTMLParser对获得的新闻进行保存到本地,存入当天的文
件夹。
由于抓取网页是一个非人工操作的工作,因此在本系统中使用后
台自定义线程,让该线程每5分钟抓取一次网页。这样便可省去人工操作。
该功能后台运行截图:
1 项目背景及意义
2 课题总结 4 项目实现
3 项目实现
新
闻
自
动
分
类
在对新闻进行分词以后,提取新闻的特征值。通过过滤出关键词,
以这些关键词来建立信息的特征项。
本文中信息的特征集合表示形式:
D(Ti,Wi)={<T1,W1>,<T2,W2>…<Tn,Wn>}
其中D<Ti,Wi>表示文档D特征集合,Ti表示文章的特征项,Wi表
示特征项的权值。
这些特征项集合通过程序来判断文章属于的分类。本文的分类算法
主要采用改进的互信息法:
CHI(Tk,Ci)=P(Tk,Ci)|log(P(Tk,Ci)/P(Tk)*P(Ci))|
其中P(Tk,Ci)代表特征项Tk在Ci 中出现的概率,P(Tk)表示特征项
Tk在所有类别中出现的概率,P(Ci)表示Ci类在所有类别中的概率。通
过此中算法如果CHI越大,那么说明D(Ti,Wi)属于该Ci类。
1 项目背景及意义
2 课题总结 4 项目实现
3 项目实现
新
闻
自
动
分
类
public List<Article> getArticles(){
List<Article> artList = new ArrayList<Article>();
ReadFolderUtil readFolderUtil = new
ReadFolderUtil();
List<File> files = readFolderUtil.readTodayFolder();
HTMLParserUtil hUtil = new HTMLParserUtil();
for(int i=0;i<files.size();i++){
File file = files.get(i);
Article article = new Article();
String str =
hUtil.openFile(file.getAbsolutePath());
article.setTitle(hUtil.getTitle(str));
article.setKeyWord(hUtil.getKeyWord(str));
article.setContent(hUtil.getContent(str));
artList.add(article);}return artList;}
1 项目背景及意义
2 课题总结 4 项目实现
3 项目实现
用
户
兴
趣
模
型
本系统的用户兴趣模型主要是应用基于向量空间的模型。因此需
要在建立或更新兴趣模型时提取出兴趣特征信息。用户需要哪一类信息
是本系统的关键。因此对于用户的兴趣进行建立模型是本系统的核心。
基于向量空间的模型[7]表示为:{<C1,W1>,<C2,W2>…<Cn, Wn>}。
模型中c表示用户感兴趣的类别,w表示该用户在该类别所占的权重。
对于用户的兴趣模型在本系统中主要通过以下方法进行建立:首先建立
用户注册时建立用户的初始化兴趣模型,然后通过用户在系统中的行为
和习惯更新用户的兴趣模型,通过用户长期的积累逐渐形成用户稳定的
兴趣模型。
1 项目背景及意义
2 课题总结 4 项目实现
3 项目实现
用
户
兴
趣
模
型
用户兴趣模型表示用户对信息的稳定需求,能够反应用户在一段时
间内信息的主要倾向。用户兴趣模型是一个逐渐形成的过程,随着对用
户行为和反馈的收集,个性化系统将自动调整用户的兴趣模型,以使其
更好的反应出用户的兴趣。在用户兴趣模型中主要包含了用户的兴趣特
征项,同时包含了特征项的权值,如:{政治:0.5},{体育:0.3},{科技:
0.2}……通过这样的兴趣模型将用户的兴趣方向确定。
用户行为和反馈收集
兴趣模型
个性化系统
更新兴趣模型
1 项目背景及意义
2 课题总结 4 项目实现
3 项目实现
用
户
兴
趣
模
型
public List<Article> getArticlesByChara(List<Character> charList) {
List<Integer> art_ids = new ArrayList<Integer>();
for (int i = 0; i < charList.size(); i++) {
Character c = charList.get(i);
List<Integer> tempList = new ArrayList<Integer>();
tempList = characterDao.getArticleIdByKeyWord(c.getKeyWord(), c
.getType().getId());
for (int j = 0; j < tempList.size(); j++) {
art_ids.add(tempList.get(j));…
List<Integer> article_ids = new ArrayList<Integer>();
for (int i = 0; i < art_ids.size(); i++) {
int num = art_ids.get(i);
int count = 0;
for (int j = 0; j < art_ids.size(); j++) {
if (num == art_ids.get(j)) {
count++;}}if (count > 1) {article_ids.add(num);}}
List<Article> artiList = new ArrayList<Article>();
if (article_ids.size() < 5) {
List<Article> tempArtiList = articleDao.getArticlesNOTIn(charList
.get(0).getType().getId());
for (int i = 0; i < article_ids.size(); i++) {
int temp = article_ids.get(i);
for (int j = 0; j < tempArtiList.size(); j++) {
if (temp == tempArtiList.get(j).getId()) {
tempArtiList.remove(j);}}}
for (int i = 0; i < article_ids.size(); i++) {
artiList.add(articleDao.getArticle(article_ids.get(i)));}
for (int i = 0; i < 5 - article_ids.size(); i++) {
artiList.add(tempArtiList.get(i));}} else {
for (int i = 0; i < 5; i++) {
artiList.add(articleDao.getArticle(article_ids.get(i)));}}
return artiList;}
1 项目背景及意义
2 课题总结 4 项目实现
3 项目实现
新
闻
相
似
推
荐
新闻推荐主要是基于用户的兴趣模型,其次根据用户在浏览文章时
推荐与该浏览的文章相似的文章。因此为了能让用户有更好的用户体验,
同时也能让用户得到自己感兴趣的新闻,本系统采用两种推荐:1)基
于用户兴趣模型的推荐;2)基于文章相似度的推荐。
实现的效果截图:
1 项目背景及意义
2 课题总结 4 项目实现
3 项目实现
用
户
兴
趣
模
型
更
新
一个人的阅读速度在100~300词/分钟
1 项目背景及意义
2 课题总结 4 项目实现
3 项目实现
用
户
兴
趣
模
型
更
新
var start = new Date();
var total = 0;
function interest(id) {
if (total == 0)
var URL =
"http://yyz.com:8080/NewsR/user.do?method=updateUser&&id="
+ id + "&&type=click";
$.get(URL, null, function(data) {
$("#count").val(1);
total++;
alert("添加成功")});}
function unloadpage(id) {
var count = $("#count").val();
if (count == 0) {
var now = new Date();
$.get("http://yyz.com:8080/NewsR/user.do?method=updateUser&&id="
+ id + "&&time=" + (now.getTime() - start.getTime()));}}
1 项目背景及意义
2 课题总结 4 项目实现
3 项目实现
为了能够获得实时的新闻,同时为了能够获得更多的新闻。本系统
通过后台自动去抓取网页,在系统启动时变启动一个后台线程。
1.后台线程在服务器启动时自动运行,因此修改web.xml,增加如下代码:
后
台
线
程
2.然后重写ServletContextListener接口中的contextInitialized(…)方法
t = new Thread() {
public void run() {
while (true) {
//业务
………
try {
System.out.println("业务休息");
t.sleep(60 * 5 * 1000);
} catch (InterruptedException e) {};
t.start();}
1 项目背景及意义
2 项目分析
3 项目实现
4 项目总结