200 likes | 357 Views
2012届本科毕业设计. 项目名称:基于用户兴趣模型的个性化新闻推荐系统 使用技术:Struts+Spring+Hibernate+Ajax等 设计人员 : 杨勇智 专业:计算机科学与技术(软件工程方向) 班级:2008级2班 指导老师:蒲国林. 毕业设计项目. 基于用户兴趣模型的个性化新闻推荐系统. 答 辩 人:杨勇智. 指导教师:蒲国林. 2012-05-26. 主要内容. 1 项目背景及意义. 2 项目分析. 3 项目实现. 4 项目总结. 1 项目背景及意义. 2 项目分析. 3 项目实现. 4 项目总结.
E N D
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 SHHA 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 项目总结 The End 谢谢