Skip to content
This repository has been archived by the owner on Sep 3, 2020. It is now read-only.

Latest commit

 

History

History
530 lines (411 loc) · 36.5 KB

README2.md

File metadata and controls

530 lines (411 loc) · 36.5 KB

目 录

1 前言

1.1 课题的研究背景

随着时代的进步人们阅读的时间越来越少。生活的节奏越来越快。随着智能设备的普及,人们每天花费大量时间在手机上。如果利用好生活中上下班的碎片时间,来为自己充电的话。在激烈的职场竞争中立于不败之地。现在是一个信息爆炸的时代,如果你想在喧嚣的生活中静下心来进行阅读已属不易。要想从信息爆炸的互联网上找出适合自己阅读的书籍更是难上加难,本系统会通过图书的分类、评分、用户喜好等来进行图书推荐。使得找到适合自己胃口的书籍不再是一项高成本的任务。 电子书又称为e-book。简单地说,是必须透过特殊的阅读软件(reader),以电子文件的型式,透过网络连结下载至一般常见的平台,例如:个人计算机(PC)、笔记型计算机(Note-book),甚至是个人数字助理(PDA)、WAP手机,或是任何可大量储存数字阅读数据(digi-tal reading material)的阅读器上阅读的书籍,是一种传统纸质图书的可选替代品。据资料显示,中国已成为全球第二大电子书市场。

1.1.1 课题的研究目的

旨在提升年人均阅读量,打造知识城市。很多人不是没有幸福的愿望,而是没有幸福的能力。其实我们的生活就是一个个选择构成的,我们拿起一本书、听一次公开课、换一份工作、结识一个朋友都可能是生活的拐点,可多年以后,回忆起这件事,你会发现当时只是随机的一个决定。促使我们做出决定的,是我们自己的阅历、视野、思想。阅读不太可能马上就改变生活,但他们会影响我们的视野,进而在你面临选择时,使你作出更有利的选择。书不仅是用来阅读其上的文字的,也是人类灵魂的调音师。 在一个信息爆炸的时代下,消费者想要从众多的产品中找到感兴趣的产品是否困难。而与此同时信息生产者也很难从他自己的产品中获取信息,并引起公众的注意,而推荐系统是解决这一矛盾的重要工具。 推荐系统的工作是连接用户和信息,帮助用户找到对他们有价值的信息,并允许信息在对其感兴趣的用户面前显示,从而实现信息消费者和信息生产者双赢。

1.1.2 课题的研究思路和研究意义

个性化推荐的成功应用需要两个条件。 第一个是信息超载,因为如果用户可以很容易地从所有对象中找到他们喜欢的东西,那么就不需要个性化的推荐了。 第二种情况是,大多数时候用户没有特定的需求,因为如果用户有特定的需求,他们可以直接从搜索引擎中找到感兴趣的项目。


1.2 国内外研究现状、水平和发展趋势分析

1.2.1 推荐系统技术国内外研究现状与发展趋势分析

1995年3月,卡耐基.梅隆大学的RobertArmstrong等人在美国人工智能协会上提出了个性化导航系统Web Watcher;斯坦福大学的MarkoBalabanovic等人在同一会议上推出了个性化推荐系统LIRA; 1995年8月,麻省理工学院的Henry Lieberman在国际人工智能联合大会(IJCAI)上提出了个性化导航智能体Letizia; 1996年, Yahoo 推出了个性化入口My Yahoo; 1997年,AT&T实验室提出了基于协作过滤的个性化推荐系统PHOAKS和Referral Web; 1999年,德国Dresden技术大学的Tanja Joerding实现了个性化电子商务原型系统TELLIM; 2000年,NEC研究院的Kurt等人为搜索引擎CiteSeer增加了个性化推荐功能; 2001年,纽约大学的Gediminas Adoavicius和Alexander Tuzhilin实现了个性化电子商务网站的用户建模系统1:1Pro; 2001年,IBM公司在其电子商务平台Websphere中增加了个性化功能,以便商家开发个性化电子商务网站。 2003年,Google开创了AdWords盈利模式,通过用户搜索的关键词来提供相关的广告。AdWords的点击率很高,是Google广告收入的主要来源。2007年3月开始,Google为AdWords添加了个性化元素。不仅仅关注单次搜索的关键词,而是对用户一段时间内的搜索历史进行记录和分析,据此了解用户的喜好和需求,更为精确地呈现相关的广告内容。 2007年,雅虎推出了SmartAds广告方案。雅虎掌握了海量的用户信息,如用户的性别、年龄、收入水平、地理位置以及生活方式等,再加上对用户搜索、浏览行为的记录,使得雅虎可以为用户呈现个性化的横幅广告。 2009年,Overstock(美国著名的网上零售商)开始运用ChoiceStream公司制作的个性化横幅广告方案,在一些高流量的网站上投放产品广告。 Overstock在运行这项个性化横幅广告的初期就取得了惊人的成果,公司称:“广告的点击率是以前的两倍,伴随而来的销售增长也高达20%至30%。” 2009年7月,国内首个推荐系统科研团队北京百分点信息科技有限公司成立,该团队专注于推荐引擎技术与解决方案,在其推荐引擎技术与数据平台上汇集了国内外百余家知名电子商务网站与资讯类网站,并通过这些B2C网站每天为数以千万计的消费者提供实时智能的商品推荐。 2011年9月,百度世界大会2011上,李彦宏将推荐引擎与云计算、搜索引擎并列为未来互联网重要战略规划以及发展方向。百度新首页将逐步实现个性化,智能地推荐出用户喜欢的网站和经常使用的APP。

1.2.2 推荐系统技术国内外研究现状、存在问题与趋势分析

Tapestry(1992) 这是最早应用协同过滤系统的设计,主要是解决Xerox公司在Palo Alto的研究中心资讯过载的问题。这个研究中心的员工每天会收到非常多的电子邮件却无从筛选分类,于是研究中心便发展这项实验性的邮件系统来帮助员工解决这项问题。 其运作机制大致如下: 个人决定自己的感兴趣的邮件类型;个人旋即随机发出一项资讯需求,可预测的结果是会收到非常多相关的文件;从这些文件中个人选出至少三笔资料是其认为有用、会想要看的;系统便将之记录起来成为个人邮件系统内的过滤器,从此以后经过过滤的文件会最先送达信箱;以上是协同过滤最早的应用,接下来的里程碑为GroupLens。 GroupLens(1994) 这个系统主要是应用在新闻的筛选上,帮助新闻的阅听者过滤其感兴趣的新闻内容,阅听者看过内容后给一个评比的分数,系统会将分数记录起来以备未来参考之用,假设前提是阅听者以前感兴趣的东西在未来也会有兴趣阅听,若阅听者不愿揭露自己的身分也可以匿名进行评分。 和Tapestry不同之处有两点,首先,Tapestry专指一个点(如一个网站内、一个系统内)的过滤机制;GroupLens则是跨点跨系统的新闻过滤机制。再来,Tapestry不会将同一笔资料的评比总和起来;GroupLens会将同一笔资料从不同使用者得到的评比加总。 GroupLens具有以下特点:开放性:所有的新闻阅听者皆可使用,虽然系统委托Better Bit Bureau设计给分的系统,但若有不同的评分机制也适用于GroupLens。方便性:给分并不是一件困难的事情且沟通上非常方便,评分结果容易诠释。规模性:有可能发展成大规模的系统,一旦发展成大规模,储存空间与计算成本问题显得相当棘手。隐密性:如果使用者不想让别人知道他是谁,别人就不会知道。由此可以看出,现今网络各个推荐系统的雏形已然形成,在GroupLens之后还有性质相近的MovieLens,电影推荐系统;Ringo,音乐推荐系统;Video Recommender,影音推荐系统;以及Jster,笑话推荐系统等等。乃至于今日的YouTube、aNobii皆是相似性值得网络推荐平台,较不同的是经过时间推移,网络越来越发达,使用者越来越多,系统也发展得越来越严密。 电子商务的推荐系统 最著名的电子商务推荐系统应属亚马逊网络书店,顾客选择一本自己感兴趣的书籍,马上会在底下看到一行“Customer Who Bought This Item Also Bought”,亚马逊是在“对同样一本书有兴趣的读者们兴趣在某种程度上相近”的假设前提下提供这样的推荐,此举也成为亚马逊网络书店为人所津津乐道的一项服务,各网络书店也跟进做这样的推荐服务如台湾的博客来网络书店。 另外一个著名的例子是Facebook的广告,系统根据个人资料、周遭朋友感兴趣的广告等等对个人提供广告推销,也是一项协同过滤重要的里程碑,和前二者Tapestry、GroupLens不同的是在这里虽然商业气息浓厚同时还是带给使用者很大的方便。 以上为三项协同过滤发展上重要的里程碑,从早期单一系统内的邮件、文件过滤,到跨系统的新闻、电影、音乐过滤,乃至于今日横行互联网的电子商务,虽然目的不太相同,但带给使用者的方便是大家都不能否定的。


1.3 总体方案

1.3.1 方案研究目标

使用SSM框架搭建一个图书推荐网站,拥有图书推荐、分类查找、用户注册、用户评分等功能,并使用用户的评分数据来为用户进行图书推荐。通过本项目的研究,为大数据在推荐领域的应用提供一个样本。

1.3.2 方案研究内容

  1. 使用Java、Spring、Spring MVC、MyBatis来搭建网站服务器,MySQL来实现数据库。JSP、HTML、JavaScript、jQuery、Bootstrap来实现网页前端。
  2. 推荐算法采用基于物品的协同过滤算法(ItemCF)。

2 关键技术介绍

2.1 Java的系统架构

Java的一个设计目标是可移植性,这意味着为Java平台编写的程序必须在任何硬件和操作系统的组合上运行,并且具有足够的运行时支持。这是通过将Java语言代码编译成一个称为Java字节码的中间表示来实现的,而不是直接针对特定于体系结构的机器代码。Java字节码指令类似于机器码,但是它们是由专门为主机硬件编写的虚拟机(VM)来执行的。最终用户通常在他们自己的机器上为独立的Java应用程序使用Java运行时环境(JRE),或者在Java applet的web浏览器中使用。标准库提供了一种通用的方法来访问特定于主机的特性,例如图形、线程和网络。通用字节码的使用使得移植变得简单。Java本身是独立于平台的,并且适合于它由Java虚拟机运行的特定平台,它将Java字节码转换为平台的机器语言。

2.1.1 Java的优势

Java是一种通用的计算机编程语言,它是并发的、基于类的、面向对象的,并且专门设计为尽可能少的实现依赖。它的目的是让应用程序开发人员“编写一次,到处运行”(WORA),16意味着编译的Java代码可以在支持Java的所有平台上运行,而不需要重新编译。Java应用程序通常编译成字节码,可以在任何Java虚拟机(JVM)上运行,而不考虑计算机架构。

Java使用自动垃圾收集器来管理对象生命周期中的内存。程序员确定何时创建了对象,并且Java运行时负责在不再使用对象时恢复内存。一旦没有对对象的引用保留,不可到达的内存就有资格被垃圾收集器自动释放。

Java是一个强类型语言,它允许扩展编译时检查潜在类型不匹配问题的功能。Java要求显式的方法声明,它不支持C风格的隐式声明。这些严格的要求保证编译程序能捕捉调用错误,这就导致更可靠的程序。可靠性方面最重要的增强之一是Java的存储模型。Java不支持指针,它消除重写存储和讹误数据的可能性。类似地,Java自动的“无用单元收集”预防存储漏泄和其它有关动态存储分配和解除分配的有害错误。Java解释程序也执行许多运行时的检查,诸如验证所有数组和串访问是否在界限之内。异常处理是Java中使得程序更稳健的另一个特征。异常是某种类似于错误的异常条件出现的信号。使用try/catch/finally语句,程序员可以找到出错的处理代码,这就简化了出错处理和恢复的任务。

Java的存储分配模型是它防御恶意代码的主要方法之一。Java没有指针,所以程序员不能得到隐蔽起来的内幕和伪造指针去指向存储器。更重要的是,Java编译程序不处理存储安排决策,所以程序员不能通过查看声明去猜测类的实际存储安排。编译的Java代码中的存储引用在运行时由Java解释程序决定实际存储地址。 Java运行系统使用字节码验证过程来保证装载到网络上的代码不违背任何Java语言限制。这个安全机制部分包括类如何从网上装载。例如,装载的类是放在分开的名字空间而不是局部类,预防恶意的小应用程序用它自己的版本来代替标准Java类。

Java是一种先编译后解释的语言,所以它不如全编译性语言快。但是有些情况下性能是很要紧的,为了支持这些情况,Java设计者制作了“及时”编译程序,它能在运行时把Java字节码翻译成特定CPU(中央处理器)的机器代码,也就是实现全编译了。Java字节码格式设计时考虑到这些“及时”编译程序的需要,所以生成机器代码的过程相当简单,它能产生相当好的代码。

2.1.2 Servlet

Java Servlet技术为Web开发人员提供了一种简单的、一致的机制来扩展Web服务器的功能和访问现有的业务系统。 servlet是服务器端Java EE组件,它能从客户机(通常是HTTP请求)生成响应(通常是HTML页面)。

2.1.3 JSP

JavaServer Pages(JSP)是服务器端Java EE组件,它可以生成响应,通常是HTML页面,以响应来自客户机的HTTP请求。jsp通过使用特殊分隔符<%和%来将Java代码嵌入到HTML页面中。JSP被编译成Java servlet,它本身就是一个Java应用程序,它是第一次被访问的时候。在那之后,生成的servlet会创建响应。

2.2 SSM框架的系统架构

2.2.1 SSM框架的优势

SSM框架是Spring MVC ,Spring和MyBatis框架的整合,是标准的MVC模式,将整个系统划分为表现层,controller层,service层,DAO层四层。使用Spring MVC负责请求的转发和视图管理。Spring实现业务对象管理,MyBatis作为数据对象的持久化引擎。

2.2.2 Spring框架

Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式该框架的核心特性可以被任何Java应用程序使用,但是在Java EE(Enterprise Edition)平台之上构建web应用程序的扩展也有扩展。尽管该框架没有强制执行任何特定的编程模型,但是它在Java社区中已经成为了一种流行,甚至可以替代Enterprise JavaBeans(EJB)模型。

Spring框架

核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。

Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。

Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。

Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。

Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。

Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。

Spring MVC 框架:MVC 框架属于SpringFrameWork的后续产品,是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

Spring MVC框架

2.2.3 MyBatis框架

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。MyBatis是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

2.2.4 MAVEN框架

Apache Maven是一个软件项目管理和理解工具。根据项目对象模型(POM)的概念,Maven可以从中心信息中管理项目的构建、报告和文档。Maven可以提供高质量的项目信息,这些信息部分取自您的POM,部分来自于您的项目的源代码。Maven可以提供:从源代码控制直接创建的变更日志文档、交叉引用源、邮件列表、依赖项列表、包括覆盖率的单元测试报告。随着Maven的改进,所提供的信息集将得到改进,所有这些对Maven用户都是透明的。其他产品还可以提供Maven插件,让它们的项目信息集与Maven提供的一些标准信息一起,这些信息都是基于POM的。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。

2.2.5 MySQL数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。其中的数据�引擎Innodb的主要特性:DML操作遵循ACID模型,事务支持commit,rollback和crash recovery,从而保护用户数据。基于行锁以及类似oracle的一致性读,提升了多用户的并发和性能。基于主键对查询进行优化。为了维护数据的完整性,InnoDB也支持外键。如果使用了外键,insert,update以及delete操作都会得到检查,以确保不会导致多表之间的数据不一致。可以将InnoDB的表和Mysql其它存储引擎的表混合使用,甚至在同一个sql语句当中。比如:可以使用join操作将InnoDB表和MEMORY中的表进行合并。

2.2.6 Tomcat服务器

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器。Apache Tomcat软件是Java Servlet、JavaServer Pages、Java表达式语言和Java WebSocket技术的开源实现。Java Servlet、JavaServer Pages、Java表达式语言和Java WebSocket规范是在Java Community Process下开发的。Apache Tomcat项目旨在与来自世界各地的最佳开发人员协作。

2.2.7 HTML、JavaScript

超文本标记语言(HTML)是用于创建网页和Web应用程序的标准标记语言。通过级联样式表(CSS)和JavaScript,它构成了万维网的三大基石技术。Web浏览器从Web服务器或本地存储器接收HTML文档,并将它们呈现为多媒体网页。HTML描述了网页的语义结构和最初包含文档外观的提示。HTML元素是HTML页面的构建块。使用HTML结构,图像和其他对象(例如交互式表单)可以嵌入到呈现的页面中。它提供了一种方法来创建结构化文档,方法是指定文本的结构语义,如标题,段落,列表,链接,引号和其他项目。HTML元素由标签描述,使用尖括号编写。标签等,并引入内容到页面直接。其他人如

...

环绕并提供关于文档文本的信息,并可包括其他标签作为子元素。浏览器不显示HTML标签,而是使用它们来解释页面的内容。HTML可以嵌入用JavaScript等脚本语言编写的程序,这些程序会影响网页的行为和内容。包含CSS定义了内容的外观和布局。

JavaScript 通常缩写为JS,是一个高层次,解释 的编程语言。它是一种语言,其特征也是动态的,弱类型的,基于原型的和多范式的。除HTML和CSS外,JavaScript是万维网 内容工程的三大核心技术之一。它用于使网页互动并提供在线节目,包括视频游戏。大多数网站都使用它,所有现代Web浏览器都支持它,而不需要通过内置JavaScript引擎进行插件。每个JavaScript引擎代表了JavaScript的不同实现,全部基于ECMAScript规范,一些引擎不完全支持该规范,并且许多引擎支持ECMA之外的其他功能。作为一种多范式语言,JavaScript支持事件驱动型,功能型和命令型(包括面向对象和基于原型的)编程风格。它有一个用于处理DOM的文本,数组,日期,正则表达式和基本操作的API,但是该语言本身不包含任何I / O,例如网络,存储或图形设备,依赖于这些它所在的主机环境。

2.2.8 jQuery与Ajax框架

jQuery的是跨平台的 JavaScript库旨在简化客户端脚本的HTML。Query的核心是一个文档对象模型(DOM)操作库。DOM是网页所有元素的树状结构表示。jQuery简化了查找,选择和操作这些DOM元素的语法。例如,jQuery可用于在文档中查找具有某个属性的元素(例如,所有带有h1标签的元素),更改其一个或多个属性(例如颜色,可见性)或使其响应事件(例如鼠标点击)。jQuery还提供了一个超越基本DOM元素选择和操作的事件处理范例。事件分配和事件回调函数定义在代码中的单个位置执行一步。Query的语法旨在使浏览文档,选择DOM元素,创建动画,处理事件以及开发Ajax应用程序变得更加简单。

Ajax是一组的Web开发使用的许多Web技术技术的客户端创建异步 的Web应用程序。借助Ajax,Web应用程序可以从服务器发送和检索数据异步(在后台),而不会干扰现有页面的显示和行为。通过将数据交换层与表示层分离,Ajax允许Web页面和扩展Web应用程序动态更改内容,而无需重新加载整个页面。在实践中,由于JSON原生于JavaScript的优势,现代实现通常使用JSON而不是XML。

2.2.9 Bootstrap框架

Bootstrap,是目前很受欢迎的前端框架。Bootstrap 是基于 HTML、CSS、JavaScript 的,它简洁灵活,使得 Web 开发更加快捷。它由Twitter的设计师Mark Otto和Jacob Thornton合作开发,是一个CSS/HTML框架。Bootstrap提供了优雅的HTML和CSS规范。Bootstrap一经推出后颇受欢迎,一直是GitHub上的热门开源项目,包括NASA的MSNBC(微软全国广播公司)的Breaking News都使用了该项目。

2.2.10 jsoup第三方包

jsoup是一个开源的Java库,用于提取和处理存储在HTML文档中的数据。jsoup是一个用于处理HTML的Java库。它提供了一个非常方便的API来提取和操作数据,使用DOM,CSS和类似jquery的方法。jsoup实现了WHATWG HTML5规范,并将HTML解析为与现代浏览器相同的DOM。从URL,文件或字符串中抓取并解析 HTML使用DOM遍历或CSS选择器查找和提取数据操纵 HTML元素,属性和文本根据安全的白名单清理用户提交的内容,以防止XSS攻击输出整齐的HTML。

2.3 基于物品的协同过滤算法(Item-item collaborative filtering)

2.3.1 基于物品的协同过滤算法(Item-item collaborative filtering)原理

Item-item协作过滤是1998年由Amazon.com发明和使用的。它于2001年在一次学术会议上首次发表。该论文的作者Badrul Sarwar,George Karypis,Joseph Konstan和John Riedl赢得了2016年的测试时间奖以纸质为基础的项目协同过滤推荐算法。在国际万维网会议委员会指出,“这一优秀论文已经有了相当的现实世界的影响”。

2.3.2 基于物品的协同过滤算法(Item-item collaborative filtering)的优势

物品模型解决了用户数量多于物品的系统中的这些问题。物品模型使用每个物品的评级分布,而不是每个用户。如果用户数量多于商品数量,则每个商品的评分往往比每位用户都多,因此商品的平均评分通常不会很快发生变化。这导致模型中的评级分布更加稳定,所以模型不需要经常重建。当用户使用并评估某个项目时,该项目的相似项目将从现有系统模型中挑选出来并添加到用户的建议中。 适用于物品数明显小于用户数的场合,如果物品很多,计算物品相似度矩阵的代价交大。长尾物品丰富,用户个性化需求强烈。用户有新行为,一定会导致推荐结果的实时变化。新用户只要对一个物品产生行为,就能推荐相关物品给他,但无法在不离线更新物品相似度表的情况下将新物品推荐给用户。可以根据用户历史行为归纳推荐理由。


3 电子书推荐系统的分析与设计

3.1 系统分析

3.2 系统设计

3.2.1 类与配置文件表

符号 → 表示该类为定期手动运行模块

  1. com.controller
    1. EBookController:与图书相关的接口
    2. RatingListController:与用户评论、评分相关的接口
    3. StatisticsController:统计模块接口
    4. UserController:用户相关接口
    5. FavoriteController:用户喜爱分类接口
    6. ClassifyMainStatisticsController:分类统计相关接口
  2. com.dao
    1. DBAccess:用于获取SqlSession数据库连接
    2. EBookDao:提供图书表的访问
    3. RatingListDao:提供评分评论表的访问
    4. UserDao:提供用户表的访问
    5. FavoriteDao:用户喜爱分类表的访问
    6. ClassifyMainStatisticsDao:分类统计相关数据表的访问
    7. MatrixCDao:提供同现矩阵C与余弦相似度矩阵W的访问
    8. EBookMapper.xml:提供图书表的访问的sql语句
    9. RatingListMapper.xml:提供评分评论表的访问的sql语句
    10. UserMapper.xml:提供用户表的访问的sql语句
    11. ClassifyMainStatisticsMapper.xml:提供主分区统计表的访问的sql语句
    12. FavoriteMapper.xml:用户喜爱分类表的访问的sql语句
    13. ClassifyMainStatisticsMapper.xml:分类统计相关数据表的访问的sql语句
    14. MatrixCMapper.xml:提供同现矩阵C与余弦相似度矩阵W的访问的sql语句
  3. com.entity
    1. EBook:图书 -> ebook表
    2. RatingList:评论评分相 -> ratingList表
    3. ClassifyMainStatistics:主分区统计模块 -> classifyMainStatistics表
    4. User:用户 -> user表
    5. Favorite:用户喜爱分类实体 -> favorite表
    6. MatrixC:同现矩阵C与余弦相似度矩阵W -> matrixC表
  4. com.service
    1. EBookService:图书模块
    2. RatingListService:评论评分模块
    3. UserService:用户模块
    4. FavoriteService:用户喜爱分类模块
    5. ClassifyMainStatisticsService:分类统计模块
  5. com.statistics
    1. → ItemCollaborationFilter:用于计算基于物品的协同过滤推荐矩阵
    2. → StatisticsClassifyMain:统计主分类的各个分数的评分人数、平均评分、评分的方差
    3. → StatisticsRatingValue:图书评分信息统计:统计RatingValue表的数据并将统计结果写入到EBook表对应到图书上
  6. com.util
    1. ChartDataJsonCreater:提供将�数据转换为 Chart.js 插件专用的结构化 Json 数据格式
    2. JSONConverter:提供用于将 JavaBeans 对象直接转化为结构化 Json 数据
    3. RandomNumFactory:随机数生成工具类
  7. spider(爬虫包)
    1. BookInfoSpider:爬取电子书详情页并存入数据库
    2. → EBookListSpider:爬取全部电子书
    3. HttpURLConnectionUtil:
    4. → RatingValueListSpider:爬取豆瓣图书评分列表与用户评论(从数据库读取图书信息并爬取图书的评分列表)
  8. 配置文件
    1. SSM框架配置文件
      1. applicationContext.xml:Spring 框架配置文件
      2. jdbc.properties:jdbc 配置文件
      3. mybatis-config.xml:MyBatis 框架配置文件
      4. web.xml:项目配置文件
    2. 爬虫配置文件
      1. setting.properties:电子书爬虫(EBookListSpider)的配置文件
      2. user_spider_setting.properties:用户评论评分爬虫(RatingValueListSpider)的配置文件
      3. user_spider_exception.log:用户评论评分爬虫(RatingValueListSpider)的错误日志

3.2.2 系统需求

系统�的主要使用对象为一般用户,次要使用对象�为开发者。

系统包括以下功能:

  1. 爬虫功能:可以使用爬虫从指定网站上爬取图书与评分评论信息。
  2. 图书分类�查询功能:用户可以根据图书分类来查询图书。
  3. 图书关键字搜索功能:用户可根据关键字来�搜索图书。
  4. 图书详情展示功能:用户可以查看图书详情。
  5. 评分评论查看功能:用户可以查看图书的评分评论列表。
  6. 评分评论功能:用户可以对图书进行评分与撰写评论。
  7. 用户注册功能:用户可以注册账号。
  8. 用户登录功能:用户可以登录网站来使用其它功能。
  9. 图书推荐功能:可根据用户评分来对用户�推荐图书。
  10. 统计功能:开发者可以使用该功能计算并存储与推荐相关的数据。�

3.2.3 系统类结构

EMAN类结构.png

3.2.4 数据库表设计

4 系统的实践与应用

4.1 系统模块实践

4.1.1 主页

4.1.2 用户模块�User

4.1.3 图书模块EBook

4.1.4 评分评论模块RatingList

4.1.5 用户喜爱模块Favorite

4.1.6 图书分类模块ClassifyMain

4.1.7 统计模块Statistics

4.1.8 爬虫模块

4.2 算法设计

4.2.1 基于物品的协同过滤算法(Item-item collaborative filtering)简介

建立用户物品倒排表

A a b d
B d e f
C a c d
D b f
E a b d
F b d

计算共现矩阵C

a b c d e f
a 2 1 3
b 2 3 1
c 1 1
d 3 3 1 1 1
e 1 1
f 1 1

计算余弦相似度矩阵W:

a b c d e f
3 4 1 5 1 2
a b c d e f
a 0.58 0.58 1.0
b 0.58 1.44 0.35
c 0.58 0.45
d 1.0 1.44 0.45 0.45 0.32
e 0.45 0.71
f 0.32 0.71

4.3 在图书推荐网站中的应用

4.3.1 图书推荐网站的功能分析

EMAN类结构.png

5 总结与展望

5.1 总结

5.2 展望

参 考 文 献

致    谢