当前位置:   article > 正文

基于知识图谱的图书智能推荐系统+论文+ppt_知识图谱书籍推荐系统 毕业设计

知识图谱书籍推荐系统 毕业设计

项目效果图:
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

摘  要

推荐系统旨在为用户推荐智能化的在线商品或信息,其广泛应用于众多Web场景之中,来处理海量信息数据所导致的信息过载问题,以此提升用户体验。鉴于推荐系统强大的实用性,自20世纪90年代中期以来,研究者针对其方法与应用两方面,进行了大量广泛的研究.近年来,很多工作发现知识图谱中所蕴含的丰富信息可以有效地解决推荐系统中存在的一系列关键问题,例如数据稀疏、冷启动、推荐多样性等。

近几年随着数字图书馆的高速发展,其数字资源馆藏已实现了海量增长,读者对资源的需求越来越智能化,这些因素推动着图书馆推荐系统应用的普及和深化。知识图谱技术是现今图书馆学的研究热点,据此,对基于知识图谱的图书馆推荐系统进行了研究,并将其与传统的基于ALS的协同过滤算法进行比较.结果显示,基于知识图谱的MKR推荐算法可以取得较好的图书推荐效果,能够助力今后智能化图书馆推荐系统的建设。

本次图书智能推荐系统前端采用Bootstrap框架,后台采用Java的SSM框架和Mysql数据库,将系统分为了三层:Web层、服务与模块层、数据层,并对每层的结构与需要完成的功能做了定义。并建立了图书智能推荐系统所需的数据库,该数据库的数据共分为三个部分:原始数据、清洗后数据和用户数据。设计了图书智能推荐系统的页面,主要包括首页、搜索、展示、登录、注册等页面。经过后期的数据库优化与功能测试,系统与同类网站相比,性能良好。

关键词:知识图谱;个性化;智能化;图书推荐;SSM

Abstract

A recommendation system is designed to recommend intelligent online goods or information for users. It is widely used in many Web scenarios to deal with the information overload caused by massive information data so as to enhance the user experience. In view of the strong practicability of the recommendation system, since the mid-1990s, researchers have carried out a lot of extensive research on its methods and applications. in recent years, many works have found that the rich information contained in the knowledge map can effectively solve a series of key problems existing in the recommendation system, such as data sparsity, cold start, recommendation diversity and so on.

In recent years, with the rapid development of digital library, its digital resource collection has achieved a massive growth, readers’ demand for resources is becoming more and more intelligent, these factors promote the popularization and deepening of the application of library recommendation system. According to the research focus of library science, the knowledge map-based library recommendation system is studied and compared with the traditional ALS-based collaborative filtering algorithm. Results show that the MKR recommendation algorithm based on knowledge map can achieve better book recommendation effect and help the construction of intelligent library recommendation system in the future.

The front end of this book intelligent recommendation system adopts Bootstrap framework, and the background adopts Java SSM framework and Mysql database. The system is divided into three layers: Web layer, service and module layer, data layer, and the structure of each layer and the functions to be completed are defined. and the database needed for the book intelligent recommendation system is established. the data of this database is divided into three parts: raw data, data after cleaning and user data. Design the book intelligent recommendation system page, mainly including home page, search, display, login, registration and other pages. After the later database optimization and function test, the system has good performance compared with similar websites.

*Keywords:* knowledge map; individuation; intelligence; book recommendation; SSM

目 录

摘  要

Abstract

1 引言

1.1选题背景及意义

1.1选题背景

1.2选题意义

1.2研究现状

1.3 论文研究内容

1.4 论文的组织结构

2 关键技术介绍

2.1推荐技术

2.2知识图谱

2.3 Web开后端技术

2.3.1 Maven介绍

2.3.2 MVC模式与Spring Framework框架

2.3.3 MyBatis介绍

2.3.4 Bootstrap介绍

2.3.5 Mysql

2.4 小结

3 基于知识图谱的图书智能推荐系统设计

3.1 系统总体设计

3.1.1 总体功能描述

3.1.2 系统模块组成

3.2 模块详细设计

3.2.1 数据库设计

3.2.2 页面原型设计

3.3 小结

4 基于知识图谱的图书智能推荐系统实现

4.1 环境的搭建

4.1.1 数据库的建立与数据的导入

4.1.2 工程建立

4.1.3 版本控制

4.1.4 MyBatis配置

4.2 数据的清洗

4.3 系统开发

4.3.1 控制器类

4.3.2 模块类

4.3.3 视图类

4.4 分析及调优

4.6 小结

5 系统测试

5.1 软件测试的目的和原则

5.2 性能测试

结  论

参考文献

致  谢

1 引言

1.1选题背景及意义

1.1选题背景

自二十世纪九十年代诞生以来,个性化推荐系统一直在互联网的众多领域发挥着巨大的作用,例如亚马逊的电子商务系统、Hulu的视频推荐系统、Pandora的音乐推荐系统等。进入二十一世纪以来,移动互联网得到高速发展,用户的移动个人终端设备越来越普及。移动设备往往体积较小,移动端页面承载的信息量较电脑端大大降低;在这样的背景下,展现给每个用户的信息将要求更精准、更符合每个人的个体需求。而信息的碎片化、文化的多样性,也带来了人们对信息的需求越来越个性化。这些因素大大地推动了个性化推荐系统应用的普及和深入。我们相信在不远的将来,推荐系统会像搜索引擎一样,成为互联网产品必不可少的基础性应用。

图书作为一种重要的资讯形式,时时刻刻影响着人们的生活。然而,在动辄以PB为单位的数据量下,用户难以在其中找到自己感兴趣的内容,这为用户体验带来了极其负面的影响。为了消除这种负面影响,各大互联网图书平台广泛地应用了推荐技术,旨在帮助用户更快速地获取到他们感兴趣的内容,从而提升用户体验。

推荐技术的大规模应用,为各大互联网图书平台带来了可观的收益。最具有代表性的互联网图书平台—“今日头条”,就因为其优秀的推荐效果而在短时间内抢占了数以亿计的用户,推荐技术俨然已经成为了互联网图书平台的核心竞争力之一。无论是工业界还是学术界,都在为提升推荐效果进行着不断的尝试和探索。

近年来,神经网络模型,一在计算机的各个应用领域中大放异彩,因此,不少研究者尝试将神经网络模型应用到推荐系统中。神经网络模型的表现与特征的质量息息相关,传统的特征构建方法为使用词向量表示方法,将文字转化为计算机能够处理的数值向量,以此作为模型的输入。然而,仅仅依靠词向量进行特征构建,往往会忽略掉文本中的部分语义特征,知识图谱的出现为提取文本中的语义特征提供了新的思路。

1.2选题意义

在这样的背景下,本次毕业设计基于知识图谱的图书智能推荐系统的研发,帮助更多的图书机构更为便捷和快速的把推荐系统应用到各种图书业务场景中。图书智能推荐系统通过对资讯和用户进行标签化并结合多种经典的推荐算法如:基于用户的协同过滤算法、基于物品(资讯)的协同过滤算法、基于内容的推荐算法等来进行图书资讯、产品的个性化推荐。

但基于经典的推荐算法进行相关相似度计算时,均没有对输入参数自身间的关系及对参数间关系带来关联度或权重的变化做很好的体现。例如,传统资讯间的相似度算法如余弦相似度,通常根据语义分析关键字来进行计算;但通常会忽略关键字间的关联关系及层次结构;本文将通过引入知识图谱到传统的推荐算法中,来优化相关的相似度计算结果,有效提升推荐效果。

推荐技术应用十分广泛,几乎已经成为了互联网图书服务的基础技术之一。优秀的推荐技术能够为用户带来更加舒适的体验,从而为互联网图书平台吸引并留住更多的用户,最终为平台创造更多的收益。因此,针对基于知识图谱的图书推荐技术的研究具有十分重要的意义。

1.2研究现状

基于知识图谱的推荐技术可以分为基于本体的推荐技术以及基于开放链接数据(Linked Open Data,LOD)的推荐技术两种。

基于本体的推荐技术主要是利用本体中细粒度的、对概念层级关系的描述,通过对概念的细粒度的分类描述来更加精准的对实体特征进行表示,从而挖掘出事实中蕴含的深层次信息。

Al-Nazer等使用本体技术来分析用户的偏好,构建营养和健康导向的用户档案,并使用该档案来组织相关知识,为用户推荐更加健康的食品。Kethavarapu等基于求职网站上的岗位数据,动态地生成本体,然后通过重排序和相似度算法为求职者推荐岗位信息。Thanapalasingam构建了一个基于本体的科学出版物推荐系统,解决了科学出版物的主题表征以及推荐问题。尽管基于本体的推荐技术在一些领域取得了不错的成效,但要使用基于本体的推荐技术,面临的首要问题就是本体的构建,由于构建本体需要相关领域专家的深度参与,构建成本较高,因此在许多的场景下并不适用。

基于开放链接数据的推荐技术的核心思路是将知识图谱的数据层中丰富的语义信息应用到现有的推荐方法中,用于计算用户兴趣以及内容之间相似程度,从而给出推荐结果。Lu等基于DBpedia和Wikidata构建了一个世界级的旅行知识图谱,从而在更细的语义粒度上对旅游景点进行描述,提升了针对旅游景点的推荐效果,但是在使用字符串对景点进行语义标注方面做的还不甚理想。Wenige等基于开放链接数据的推荐方法应用于数字图书馆中的信息检索和推荐,使用灵活的相似性计算方法和基于约束的推荐方法对系统中己有的搜索功能进行了增强。Chicaiza等在开放链接数据的基础上,结合每个用户的特征(比如用户身份)进行推荐,从而得到更加适合用户的推荐结果。由于开放链接数据的构建难度较小,多采用自动化的方式进行构建,构建成本较低,因此应用较为广泛。

以上基于知识图谱的推荐方法,为推荐技术提供了新的实现思路,并且在特定的应用场景下取得了相当不俗的成果。但是,现有的方法大多专注于使用知识图谱对用户特征进行更加精细的描述,忽略了从更加泛化的维度去描述特征,使得对用户特征的刻画过于“精准”,在一定程度上导致了推荐方法的泛化能力欠佳。在实际的应用场景中,当用户对“乔布斯”这一实体产生浓厚的兴趣时,其往往会对与“乔布斯”有直接关联的实体(如“苹果公司”、“iPhone” ."iOS系统”等)同样感兴趣。因此,在对用户兴趣进行表示时,理应把这些相关实体考虑在内。

1.3 论文研究内容

本文主要围绕图书智能推荐问题,基于知识图谱对用户兴趣进行更加合理的表示,从而提升模型的推荐效果。首先使用图书文本数据构建知识图谱,接着借助知识图谱以及词向量表示方法进行用户兴趣的向量化表达,然后使用卷积神经网络训练得到图书推荐模型,最后基于得到的图书推荐模型设计并实现一个图书推荐系统。本文的主要研究内容具体如下:

实现对图书内容进行展示、查询、用户登录注册,还有推荐信息的展示功能。用户通过浏览器与后台系统的Java Servlet、数据库交互,完成展示、查询与用户管理的目的。

通过现有流行的开源系统、框架,来搭建轻量级的目标Web系统,在实现过程中更注重于代码结构与开发方法,所以并不追求功能的繁杂冗余。系统中数据来源于豆瓣,数据的抓取不是本课题研究的内容。为了使数据适用于Web系统,重新构建了表,并对数据进行了二次清洗。由于是展示平台,并不涉及图书智能推荐算法的实现与搜索功能的完善,所以搜索结果由数据库查询获得。但是在开发过程中为图书智能推荐与社会化图书搜索预留了接口,可以方便的加入这些功能。

1.4 论文的组织结构

第一章,文献综述。先讲了课题的背景,从图书智能推荐历史和技术发展史两个方面介绍,之后介绍了开展研究的意义,最后明确了研究的工作重点。

第二章,框架与工具介绍。对Maven、Git等项目管理工具,Spring MVC、MyBatis、Bootstrap、jQuery等开发框架进行了介绍。

第三章,基于知识图谱的图书智能推荐系统的设计。对此Web系统所用到的数据库结构、页面原型、模块组成、总体的功能进行了论述。

第四章,基于知识图谱的图书智能推荐系统的实现。介绍了对数据的二次清洗、数据库的创建、数据的导入、工程的搭建、模块的开发以及测试等。并介绍了测试过程中做的一些性能优化工作。

最后,结论。对本系统的优缺点做了一个总结,展望了一下未来的发展方向。

2 关键技术介绍

2.1推荐技术

推荐技术被广泛应用于以内容服务为主的互联网系统中,涵盖了新闻、电子商务、电影、音乐等多个领域。推荐技术的主要目标是为用户提供其感兴趣的内容,从而挖掘用户的潜在价值。

基于内容的推荐技术主要根据用户己经操作过的内容以及内容间的相似度进行推荐。其具体的推荐方法是,用户A喜欢内容1,内容1与内容3相似,则将内容3推荐给用户A。

基于协同过滤的推荐技术综合了用户的共同行为,将相似用户的喜好结合,从而产生推荐结果。其具体推荐方法是,用户A与用户C相似,用户A喜欢内容1,用户C喜欢内容1,2,则将内容2推荐给用户A。

混合推荐技术是将多种推荐技术进行混合,通常是将基于内容的推荐技术和基于协同过滤的推荐技术相混合。混合的方式可以分为推荐结果的混合以及推荐算法的混合。推荐结果的混合即通过不同的推荐技术产生多个推荐列表,然后将多个推荐列表混合后作为最终的推荐结果。推荐算法的混合即改造推荐算法,将多种不同的推荐算法融合后进行推荐,例如Park等增在协同过滤推荐算法中混合基于内容的推荐算法。

2.2知识图谱

知识图谱是一种由主语、谓语、宾语构成的语义化知识网络,它旨在描述客观世界中的实体、实体间的关系以及实体所拥有的属性。因此,知识图谱通常可以表示为<实体,关系,实体>以及<实体,属性名,属性值>的三元组形式。

知识图谱中往往会包含大量的知识,根据知识图谱中知识类型的不同,可以将知识图谱分为通用知识图谱和领域知识图谱两种。通用知识图谱中的知识主要是百科型的常识数据,覆盖面较广,知识深度较浅。领域知识图谱则是面向某一个特定的领域或行业,覆盖面较小,知识深度较深。

知识图谱从层次上可以划分为本体层和数据层。本体层主要负责定义知识图谱的数据类型和数据间的关系,数据层则用于存储数据。因此,知识图谱的构建方法主要有两种,一种是自上而下进行构建,另一种是自下而上进行构建。自上而下的构建方法需要领域专家参与,预先定义好知识的抽象形式,完成本体层的构建后再向知识图谱的数据层填充数据。通过自上而下的方法构建出来的知识图谱质量更高,但构建速度缓慢,前期成本过高,无法适应大部分的场景。自下而上的构建方法则是先构建数据层,再根据数据层自动构建本体层。通过自下而上的方法构建知识图谱降低了构建成本,同时也降低了知识图谱的质量,但已经能够满足绝大多数的应用需求,因此目前大部分的知识图谱都是使用自下而上的方法进行构建。

数据获取主要是获取源数据,对于结构化数据,一般可以直接融合到知识图谱中,对于半结构化和非结构化数据,需要先进行信息获取,即从数据中抽取信息。信息获取的目的主要是从数据中抽取<实体,关系,实体>以及<实体,属性名,属性值>三元组。抽取三元组的方法有很多,可以通过命名实体识别以及实体关系抽取进行三元组的抽取,也可以通过句法分析的方式分析句子中的成分,进而根据句子成分抽取三元组。信息获取完成后,可以根据需求对获取到的信息进行质量评估,并将通过评估的知识融合到知识图谱中。知识图谱的存储方式比较多元,可以选择知识描述语言进行表示及存储,如RDF等;也可以通过图数据库进行存储并进行可视化,如Neo4j等。

本文通过依存句法分析抽取三元组,并将抽取到的三元组按照规则进行过滤后存入Neo4j,形成知识图谱。

2.3 Web开后端技术

2.3.1 Maven介绍

Maven是一个主要用于Java项目的自动化构建工具。Maven与Apache Ant工具具有相似的目的,但是他们是基于不同的理念并且以不同的方式来工作。Ant还可以用来构建和管理C#,Ruby,Scala以及其他的语言开发的项目,但是Maven原生并不支持这些。Maven项目由Apache Software Fundation托管,之前是Jakarta Project项目的一个部分[7]。

Maven使用XML文件来描述需要构建的软件项目、项目的依赖模块和组件、构建顺序、目录结构以及需要的插件。他具有预定义的目标来实现确切的任务,比如编译源码并打包。

Maven动态地从一个或多个库中下载Java库和Maven插件,比如Maven 2 Central Repository,并且将下载的内容保存到本地的缓存中。这个本地的下载缓存可以被本地项目更新,公共的库也可以被更新。

Maven使用基于插件的体系来构建,他允许通过标准的输入控制任何的应用。理论上说,这将允许任何人为任何语言来在这个平台上编写插件。实际上,支持和使用除Java外其它语言的插件数量已经微乎其微。目前,只有支持.NET框架以及一个C/C++的原生插件还在被维护。

2.3.2 MVC模式与Spring Framework框架

MVC模式是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。

MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构更加直观[9]。软件系统通过对自身基本部分分离的同时也赋予了各个基本部分应有的功能。组件合作关系如图2.1所示。

img

图2.1 一种典型的MVC组件合作方式

模型(Model):“数据模型”用于封装与应用程序的业务逻辑和数据处理相关的方法。“模型”有对数据直接访问的权力,例如对数据库的访问。“模型”不依赖于“视图”和“控制器”,也就是说,模型不关心它会被如何显示或是如何被操作。但是模型中的数据的变化一般会通过一种刷新机制被公布。为了实现这种机制,那些用于监视此模型的视图必须事先在此模型上注册,从而,视图可以了解数据模型上发生的变化。

视图(View):视图层能够实现数据有目的的显示(理论上,这不是必需的)。在视图中一般没有程序上的逻辑。为了实现视图上的刷新功能,视图需要访问它监视的数据模型(Model),因此应该事先在被它监视的数据那里注册。

控制器(Controller):控制器起到不同层面间的组织作用,用于控制应用程序的流程。它处理事件并做出响应。“事件”包括用户的行为和数据模型上的改变。

Spring Framework提供它自己的MVC web应用程序框架,这并不是开发之初计划的。由于当时流行的Jakarta Struts web框架的设计很糟糕,并且其他框架也有许多不足之处,Spring开发者决定去编写他们自己的web框架。最重要的一点,他们觉得在表现与请求处理层之间没有完整的分离,并且请求处理层和模块层也没有完全分离。

就像Struts,Spring MVC也是一个基于请求的框架。每个接口的目的是让Spring MVC用户能够清晰、容易的实现MVC框架的应用。所有的接口都是与Servlet API紧耦合的[10]。这个对Servlet API的紧耦合被某些开发者看做是Spring的失败,它不能提供一个高层次的对基于web的应用的抽象层。然而,这样耦合确保了Servlet API能够给开发者提供一个高度抽象的框架来使得开发变得容易[11]。

Spring MVC框架围绕一个核心servlet来给控制器分发请求并且提供一些其它的功能来方便web应用的开发,Spring的DispatcherServlet就是用来干这些的。它将Spring IoC容器完全集成在一起,这样你就可以使用所有其它的Spring特性。

Spring Web MVC DispatcherServlet的请求处理工作流如图2.2所示。DispatcherServlet是一种“Front Controller”设计模式的表现(这种设计模式在许多其它的web框架中也很常见)。

img

图2.2 Spring Web MVC中的请求处理工作流(高层)

DispatcherServlet是一个真实存在的Servlet(它继承自HttpServlet基类),并且在web应用的web.xml文件中声明。那些你想要DispatcherServlet处理的请求必须在同一个web.xml文件中使用URL映射来映射到这个Servlet。这是标准的J2EE servlet配置。图2.3是对DispatcherServlet的声明和映射。

img

图2.3 DispatcherServlet的声明和映射

在上面的配置示例中,所有的以.form结尾的请求都会被”example” DispatcherServlet来处理。这仅仅是配置Spring Web MVC的第一步。

在Web MVC框架中,每个DispatcherServlet都有自己的WebApplicationContext,这个WebApplicationContext继承了根WebApplicationContext定义的所有的beans。图2.4为Spring Web MVC中的上下文层次关系。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图2.4 Spring Web MVC中的上下文层次关系

框架将会在初始化DispatcherServlet的时候,在你web应用的WEB-INF目录中寻找一个名字叫[servlet-name]-servlet.xml的文件,然后创建在那个文件里定义的beans。

WebApplicationContext是一个对单纯的ApplicationContext的扩展,对web应用增加了一些额外的特性。它区别于普通的ApplicationContext的地方是,它可以解析主题,并且它知道自己与哪个servlet相关联。

Spring DispatcherServlet有一些特定的beans来实现处理请求和获取正确的视图返回给用户。这些beans被包括在Spring框架中并且能在WebApplicationContext中配置,就像其它的beans一样的配置方式。

一些比较重要的接口定义以及他们的功能列举如下:

\1) HandlerMapping:选择对象来处理来自内部或者外部的请求。

\2) HandlerAdapter:对请求进行处理。

\3) Controller:介于Model和View之间来管理请求和返回合适的响应。他就像一个门,来对传入的请求进行处理。它从Model获取数据,传递给View并将View展现出来。

\4) View:用于向客户端返回数据。一些请求可能会直接请求到视图,而不经过模块部分,其它的请求三者都要经过。

\5) ViewResolver:根据逻辑名称为视图选择一个View。

\6) LocaleResolver:获取并且保存用户的位置信息。

\7) MultipartResolver:提供对文件上传的请求的封装。

以上的每个接口对整个框架都有重要的作用。这些接口提供的抽象层用处非常大,所有继承自这些接口的类都按照同样的特性建立在Servlet API之上。开发者可以自由的去编写他们的实现类。Spring MVC使用Java的java.util.Map接口作为数据Model,数据Model与View共同生成最终的返回页面[12]。

2.3.3 MyBatis介绍

MyBatis是一个在Java和.NET平台的持久层框架,它将SQL声明与存储过程使用XML描述[13]。MyBatis是一个自由软件,基于Apache License 2.0发布,它的原名为iBATIS[14]。

MyBatis允许你可以使用所有的数据库功能,比如存储过程、视图、任何复杂的查询,以及数据库厂商所专有的功能。它经常被用来处理遗留数据库、规范化的数据库或者是需要完全的控制SQL执行的时候。

它相对于JDBC简化了编码,SQL语句仅仅需要一行代码便可以执行。这样便节约了时间,避免了一些常见的失误,比如忘记关闭数据库连接、编写了一个错误的数据映射、超过了结果集的数量限制或者是查询结果不仅仅是一条。

MyBatis提供了一种映射引擎,将SQL结果映射到对象树中。SQL语句可以通过使用内置的有XML类似语法的语言来动态的建立,或者通过使用Velocity集成插件来使用Apache Velocity建立。MyBatis集成在Spring Framework和Google Guice中,这个特性可以允许自由的构建商业应用并且不需要调用任何的MyBatis接口。

MyBatis支持声明式的数据缓存。MyBatis集成了:OSCache,EHcache,Hazelcast和Memcached,并且支持集成自定义的缓存工具。

MyBatis提供一套自动生成代码的工具:MyBatis Generator。MyBatis Generator将会检查一个数据库表(或者许多表),然后生成MyBatis项目用来支持增删改查操作。

2.3.4 Bootstrap介绍

Bootstrap是一个用来创建网站和web应用的工具集。它包含许多基于HTML和CSS的设计模板:排版、表单、按钮、图表、导航、其他的界面组件以及可选的JavaScript扩展。它是GitHub上最流行的项目,NASA和MSNBC网站都在使用此框架。

Bootstrap有相对不完整的对HTML 5和CSS 3的支持,但是它兼容所有的主流浏览器。从2.0版本开始,它开始支持响应式设计。这意味着网站页面的视图设计根据设备的特点来动态的调整。

Bootstrap是Twitter发布在GitHub上的开源软件。开发者可以参与项目并且对平台贡献自己的力量。

Bootstrap是模块化的,包含一系列的LESS样式,用来实现工具的不同部件。一个叫做bootstrap.less的样式表包含了组件的样式。开发者可以选择自己需要的组件来创建自己的bootstrap.less文件。使用LESS样式表语言允许用户使用变量、函数、运算符、嵌套选择器,以及所谓的mixins。

自从2.0版本开始,在Bootstrap网站上添加了自定义的配置选项。开发者可以在一个表单上选择想要的组件和调整参数,然后生成配置好的预编译CSS样式表。

1)栅格系统和响应式设计

Bootstrap默认支持940像素宽度的栅格布局。另外,开发者可以使用一个可变宽度的布局。工具集中有四个参数来使用不同的分辨率和设备类型:手机、竖屏、横屏格式、平板电脑、有低分辨率和高分辨率的电脑。页面会自动根据这些分辨率来调整列的宽度。

2)CSS样式表

Bootstrap提供一系列的样式表来为主要的HTML组件提供基本的样式定义。这样可以对不同的浏览器和不同宽度的设备提供一套统一的文字格式、表格、表单项目布局。

3)可重用的组件

除了常用的HTML元素,Bootstrap包含一些其它的样式元素:带有高级特性的按钮(比如按钮组、带有下拉选择的按钮、导航列表、横向、纵向的标签、面包屑导航、分页等等)、标签、高级的排版功能、缩略图、带格式的警告信息以及进度条。

4)JavaScript插件

JavaScript组件基于jQuery JavaScript库。它提供附加的用户界面元素,比如对话框、工具提示以及轮播。他们也扩展了一些已经存在的页面元素,包括:一个输入框自动完成的功能。

2.3.5 Mysql

MySQL是一款优秀的关系型数据库,由瑞典的MySQL AB公司开发,后来被Oracle公司收购。在读取速度方面,和其它的关系型数据库一样,MySQL通过将数据保存到不同的数据表中,再将这些数据表保存到不同的数据库中,从而加快了MySQL的读取速度。在处理能力方面,MySQL支持大型的数据库,拥有处理上千万条记录的能力;在查询方法方面,MySQL使用标准的SQL语句进行查询,操作简洁明了;在费用方面,由于MySQL是开源的,因此开发者在使用MySQL进行开发时,不需要支付任何费用。

2.4 小结

本章简要介绍了开发过程中用到的几个比较重要的工具与框架。在项目创建和最后的部署过程中,Maven工具为项目的依赖的解决和编译打包提供了很好的解决方案。而在项目开发过程中,Git工具为代码管理、版本控制以及进度统计,都提供了很大的帮助[17]。

本章还介绍了四种框架:Spring MVC、MyBatis、Bootstrap和jQuery。前两者是后台框架,提供了一系列的类与接口,用于实现系统功能、简化与美化代码结构设计,并提供了一些工具来方便开发者实现相应的功能[18]。后两者为前台框架,简化了前台的开发过程,提供封装好的方法来让前台交互更加方便,界面更加友好。这四种框架为开发的核心框架,它们极大的提高了生产率,并且使最终的产品不仅内部结构,而且外部表现都健壮、美观。

3 基于知识图谱的图书智能推荐系统设计

3.1 系统总体设计

3.1.1 总体功能描述

本课题是要开发一套轻量级、功能完善的基于知识图谱的图书智能推荐系统。利用此平台,对图书信息进行展示与推荐,对用户提供注册与登录功能。由于原始数据为从豆瓣依照网站网页结构抓取得来,并不适用于系统直接读取,于是需要将原始数据表格进行重新设计,遍历分离所需数据存入新设计的表中,使其可以更便捷的查询与处理。开发过程需要考虑Spring MVC框架,将功能按照模块、视图、控制器三部分分离,模块与视图适度的模块化使其可以较好的重用。beans使用注解来注入,这样可以提高小的个人项目的开发效率。在开发开始,配置Maven来解决需要的依赖包,创建Git仓库,来控制版本。

3.1.2 系统模块组成

首先将系统在Spring MVC的基础上分为了三层,分别为:Web层,服务及模块层,数据层,而Web层中,分为Controller与View模块,View为Controller服务,按照预定义的格式来展示Controller的数据。Controller将数据访问与一些公共的逻辑算法交给Model来处理,Model将处理结果交还给Controller。而Model类就像前面Controller给他的任务,负责与界面无关的逻辑计算与数据库的访问、以及其它格式数据的获取。结构如图3.1所示。

img

图3.1 系统结构设计

Web层负责处理用户的请求,其中Controller会接收DispatcherServlet分发过来的请求,Controller调用服务与模块层中的模块,进过逻辑计算,生成最终的数据,将数据通过键值对的方式,将视图通过字符串方式传递给DispatcherServlet,DispatcherServlet再读取对应的View,使用View作为模板,生成最终的页面,返回给用户。

服务与模块层负责逻辑计算与数据获取。其中MyBatis Mapping模块为通过MyBatis Generator自动生成的DAO类,以及自定义的DAO类,用于连接MySQL数据库并且执行增删改查操作。而逻辑计算与数据获取模块包含了公共方法类,某些特殊的算法计算,以及对配置文件的查询取值。

最底下的数据层,包括数据库系统与文件系统,是用来存储数据与配置的层。其中数据库采用MySQL数据库,配置文件使用Java自带的.properties文件。

三层之间是互相独立的,只有最近的两层之间可以访问:服务与模块层只可以访问数据层,而Web层只可以调用服务与模块层。其中,服务与模块层中的逻辑计算与数据获取模块,每个模块之间是相互独立的,模块与模块之间不可以互相访问,这样用来降低耦合性,每个模块完成一个完整的任务。由于Web请求的模式决定Web应用只能是被动接收请求,并且Web应用没有涉及费时的网络获取,在代码中没有回调函数,所以层与层之间的调用为单向的,即模块层只可调用数据层,让数据层来执行操作,然后返回数据给模块,Web层调用模块层,将一些逻辑计算与数据获取的过程交给模块来完成,结果返回给Web层,而不可能模块层主动的调用Web层,来对其中的值进行更改,而后返回给用户一个新的页面。在Web层中,View模块只负责对数据进行格式化,生成最终用户页面,因此,它只接收Controller模块的值,而与程序的其它层次模块之间不可以通信。这样,在编写Controller模块时,并不需要了解数据库的组织结构以及配置文件的具体文件名等,只需要知道调用哪个模块,将需要的参数传入模块,模块返回的值就是所需要的数据。而在编写View模块时,也不需要了解其它各个层次都有什么作用,只需要分析页面哪个部分的数据是动态获取的,然后将此部分数据安排给Controller,让Controller传过来就可以了,这样将不同模块之间的耦合性降到了最低。而Controller就像一个乐队的指挥,按照需求调用各个模块,让系统的各个部分井然有序的工作。

3.2 模块详细设计

3.2.1 数据库设计

1)原始数据库

原始数据库存储从豆瓣抓取下来的数据,分为三张表:book_author_info,book_online_info,book_publishing_info。

book_author_info表存储作者信息,分为图书编号、作者姓名、作者简介与介绍四列。作者简介内容包括作者的生平以及与此书和作者都有关的一些事件介绍,介绍列与前者相同。作者姓名列存储了各个作者加国籍的信息,需要进行清洗。

book_online_info表存储图书的一些社会化信息,分为图书编号、标签、访问次数、5星评价数量、4星评价数量、3星评价数量、2星评价数量、1星评价数量、想读用户数量、在读用户数量、已读用户数量、还想阅读的书 这十二列。其中标签列将所有的标签,带上打标签的次数都放到了同一个字符串中,需要对其清洗。

book_publishing_info表存储了图书的出版信息,分为图书编号、ISBN号、书名、作者姓名、图书描述、图书目录、包装类型、定价、总页数、出版社名称、出版时间以及图书封面缩略图名称这十二列。作者姓名与book_author_info表的作者姓名列重复,而定价、总页数等数据使用varchar来存储,出版社也没有构建序号,不便于检索,所以这些内容都需要清洗整理。

2)清洗后数据库

清洗后的数据库是可以直接拿来网站使用的,从原始数据库中数据清洗整合出来的数据,分为九张表:book_info,tag_info,book_tag_relation,author_info,book_author_relation,nationality_info,publisher_info,binding_type,book_relation,内容如表3.1-3.9所示。

表3.1 book_info表内容

表名称书籍详细信息表
列名称图书编号、ISBN号、书名、书籍描述、书籍目录、包装类型序号、定价、页数、出版社序号、出版时间、封面图片名称、评论数量、5星评价数量、4星评价数量、3星评价数量、2星评价数量、1星评价数量、想读人数、正在读人数、已读人数
描述其中书名数据类型由原来的text转换为varchar,便于构建索引,提高查询速度。将原先耦合在一起的包装、出版社数据独立出来,只在表中引入其序号,便于按不同类型来查询。将定价和页数的数据类型由varchar改为int,方便程序读取,提高查询速度。定价数据类型并没有采用double,因为它是固定的两位小数,精确到分即可,并没有必要采用比较大的double类型。

表3.2 tag_info表内容

表名称标签内容表
列名称标签序号、标签名称、标签数量以及标签等级
描述标签序号为自动生成的这个标签唯一的序号,用来识别标签。标签名称是清洗出的单个的标签,使用varchar存储,便于生成索引,提高搜索速度,标签数量为在所有图书的标签中,标签出现的次数。

表3.3 book_tag_relation表内容

表名称图书与标签关系表
列名称图书编号、标签序号以及使用次数
描述图书编号为book_info表中的主键,标签序号为tag_info表中的主键,使用次数为给这本书打这个标签的用户的数量。

表3.4 author_info表内容

表名称作者信息表
列名称作者编号、作者姓名、作者简介内容、作者的国籍编号
描述作者编号为自动生成,是表中的主键,作者姓名是将原始数据中的作者姓名清洗出单个的作者后,放入表中的。改用varchar存储,便于生成索引。国籍编号为nationality_info的主键。

表3.5 book_author_relation表内容

表名称书籍与作者关联表
列名称图书编号、作者编号
描述图书编号对应book_info表主键,作者编号对应author_info表主键。

表3.6 nationality_info表内容

表名称国籍信息表
列名称国籍编号、国籍名称
描述国籍编号为自动生成的主键,国籍名称为从作者信息中解析出来的作者的国籍。

表3.7 publisher_info表内容

表名称出版社信息表
列名称出版社的序号、出版社名称
描述出版社序号为自动生成的主键,出版社名称为从原始数据中清洗出来,转换为varchar格式的数据,方便生成索引以提高查询速度。

表3.8 binding_type表内容

表名称包装类型信息表
列名称包装类型序号、包装类型名称
描述包装类型序号为自动生成的主键,而包装类型名称为从原始数据中清洗出来,转换为varchar类型的数据。

表3.9 book_relation表内容

表名称相关借阅信息表
列名称书籍编号、相关借阅书籍编号、相关借阅书籍名称
描述书籍编号与相关书籍借阅编号都来自于book_info的主键。而相关借阅书籍名称为书籍的字符串名称,因为有部分相关借阅书籍可能不在数据库中,所以有必要将其字符串名称存于表中,可以拿去搜索或者进行其他一些操作。

3)用户数据

用户数据是用户的登陆注册以及访问记录的表。其中的数据为Web应用自己生成,而不是预先装入系统之中的,分为:user_info,user_visit_history,user_search_history,内容如表3.10-3.12所示。

表3.10 user_info表内容

表名称用户信息表
列名称用户编号、用户名、密码、用户邮箱、用户状态、用户口令
描述其中用户编号为自动生成的主键,用户名为用户注册时所起的名称,与密码一起用于登录。密码使用SHA算法加密,用户邮箱为注册时填写,用于激活账户与找回密码之用。用户状态分三种:0:已注册,未激活,1:注册并激活,2:密码已丢失,需要重新找回。用户口令取自第一次登录的session id,用于保持用户持久登录状态。

表3.11 user_visit_history表内容

表名称用户访问记录表
列名称用户编号、用户访问图书编号、访问时间、访问来源、访问来源图书编号
描述用户编号对应user_info表中的主键,用户访问图书编号为用户打开的图书介绍页面中图书的编号,访问时间为打开图书介绍页面的时间,访问来源分三类:0:首页,1:搜索结果,2:其它图书智能推荐,其中访问来源为2的,需要填写访问来源图书编号。

表3.12 user_search_history表内容

表名称用户搜索记录表
列名称用户编号、用户搜索关键词、搜索时间
描述用户编号对应user_info表中的主键,搜索关键词为用户在搜索框中输入的关键词,搜索时间为发生搜索事件的时间。

3.2.2 页面原型设计

使用快速原型工具Axure RP Pro,根据功能设计了需要实现的页面的原型:首页、搜索结果页、图书展示页、注册页面、登录页面。生成的首页原型效果如图3.2所示。

img

图3.2 首页页面原型效果

首页顶部包含一个logo,链接到本页;搜索框,提供对图书的搜索入口。以及登陆和注册链接,用于用户的注册与登录管理。正文部分分为四个大模块,名称分别为:相关图书智能推荐、分类热门图书、图书分类以及图书排行。图书智能推荐模块列出单本书的缩略图与简要介绍,而分类热门模块列出了几个大的图书分类,以及几本此分类下的比较热门的图书。图书分类模块列出了所有的图书分类,用户可以直接点入查看此分类下的所有图书。图书排行列出前九本最热门的图书。页脚部分注明页面版权信息,以及创建年份。

搜索页面页眉页脚与首页相同,正文部分为一个搜索结果列表,显示搜索结果中的15条记录,每条记录显示图书缩略图、书名、作者、出版社、出版日期、价格以及评分。正文底部是分页,列出了结果的页数,可通过点击来查看后面的搜索结果。右侧列出了热门图书列表,用于向用户推荐。

图书展示页面页眉页脚与首页也相同,正文部分分四大块,第一块为图书基本信息,包括标题、缩略图以及一些图书在版编目信息:作者、出版社、出版时间、页数、定价、装帧、ISBN号。同时还显示评分以及各个星评分数量。第二块为内容简介,是对书内容的简要介绍以及图书目录。第三块为作者简介,是对图书作者以及译者的简要介绍。第四块为相关推荐,展示阅读此书的人还阅读了的书籍。由于原始数据并不包含用户评论,因此用户评论的内容并没有加入展示。

注册页面和登录页面较为简单,用户填写用户名、邮箱、密码、确认密码,之后点击注册即可。登录时,用户输入用户名、密码,然后登录系统,会跳转到首页,首页右侧顶端登录注册不再显示,改为用户名与退出。

3.3 小结

本章介绍了本课题所研究的基于知识图谱的图书智能推荐系统的系统总体设计与详细设计。总体设计主要讲述了系统设计的层次结构,并且规定了系统各层各模块之间的组织结构与通信规则。详细设计部分对数据库进行了设计,列出了各个表的结构与描述。并且使用页面原型工具构建了简单的页面,来作为之后页面开发与功能模块划分的依据。总体合计与详细设计在系统开发之前,对之后系统的结构与功能都起到非常重要的影响,结构的好坏直接影响到系统的性能。此章是下一步实现系统的必要步骤和重要依据。

4 基于知识图谱的图书智能推荐系统实现

4.1 环境的搭建

4.1.1 数据库的建立与数据的导入

PowerDesigner创建一个物理数据模型,配置好数据库类型,添加表结构,将在详细设计中所设计的数据库信息与列信息、自增列属性输入到表结构中,生成如图4.1所示的物理结构设计图。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图4.1 PowerDesigner数据库部分表物理结构设计图截图

使用其自动生成工具,生成用于创建数据库的SQL脚本。之后,使用MySQL工具导入到数据库中。同时,将原始数据也使用MySQL工具导入到数据库中。

4.1.2 工程建立

使用Eclipse创建一个Spring MVC项目,系统会自动生成一套目录结构,如图4.2所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图4.2 Spring MVC项目结构

src/main/java目录用来存放项目的主体部分的源代码,所有的Controller模块、Model模块,以及DAO的Java类,都放在这里,在发布的时候,这里的源码会在编译成class文件后,放入WEB-INF目录下的classes目录。

src/main/resources目录用来存放项目的配置文件以及MyBatis的Mapping文件。在部署过程中,也会被放入WEB-INF目录下的classes目录中。

src/test/java目录用来存放项目的测试类,src/test/resource目录用来存放项目的测试配置文件,这些都会在部署时,放入WEB-INF目录下的test-classes目录中。

JRE System Library包含系统中安装的JRE的库,在项目创建时,可以选择版本。

Maven Dependencies包含了在Maven的POM配置文件中所配置的依赖包,这些包在工程创建时,由Maven从Maven仓库中下载到本地缓存,并且链接到工程中。

src目录分main和test,而main/webapp目录下有resources与WEB-INF目录,其中resources目录是在servlet-context.xml中配置的,用于存放页面中的资源的目录,分为css、img、js三个目录,WEB-INF目录分为classes、spring与views目录以及web.xml文件,web.xml文件为Java Servlet的标准配置文件,Spring就在这里配置进去。classes为应用发布时,.class文件的目录,spring目录为spring配置文件存放的目录,用于修改配置,添加beans用于注入等。views目录为视图模块存放的地方,使用jsp作为视图文件。

target目录为自动编译的目录,目录中有所有类、测试类的编译结果.class文件,以及Maven的配置文件pom.xml。

pom.xml文件为Maven的配置文件,它包含了项目的基本配置、依赖包以及插件配置。项目创建时,默认只有Spring MVC的基本配置。

4.1.3 版本控制

为了开发的方便,防止不必要的损失以及对进度的掌控,项目一开始便进行了版本控制,在GitHub网站创建了一个私有仓库,项目的根目录下初始化了Git本地仓库,配置好全局变量:用户名、邮箱以及SSH key,项目目录下加入远程的GitHub仓库,之后便可以添加文件、提交更改并且推送到远程服务器上。

修改提交的节点选择在每次一个功能完成之后或者是对之前的文件需要进行比较大的修改之前。功能完成之后提交,可以确保自己能够定期的跟踪到完整的可运行的项目,不至于两次提交之间项目变化过大,如果想要修改,那就不容易找到一个合适的检出时间点。进行比较大的修改之前提交,虽然可能一个功能并没有完成,但是修改过程中可能要参考到之前的部分功能,所以仍有必要将其保存提交。在修改完之后,最终确定了用新的方案,再次提交。

4.1.4 MyBatis配置

MyBatis官方提供了一个自动生成代码的工具:MyBatis Generator(MBG)。它会检测数据库的所有表,并且生成可以用来访问数据库表的代码。这样可以减轻最初访问数据库所需编写代码的工作量。MBG提供了所有常用的数据库操作:增删改查。对于单表的操作,只需要使用这一套生成的类即可,生成结果如图4.3所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图4.3 MyBatis Generator自动生成模块

在生成的文件中,dao为mapper接口,存放TableNameMapper.java文件,用来在配置中注入或者使用SqlSession来获取实例,对数据库表执行增删改查操作。model为表结构的类TableName.java和查询条件构造类TableNameExample.java,TableName.java用于存储对应表的响应条目值,用来实现update和insert操作,以及查询出结果的存储。TableNameExample.java用来构造where语句,用于执行select操作。在数据库中有多于两个列的类型为TEXT或者BLOB,那么除了生成TableName.java,还会生成一种TableNameWithBLOBs.java的文件,其中TableName.java负责存储一般的数据类型,TableNameWithBLOBs.java文件负责存储TableName.java中所有数据之外,还包括了TEXT和BLOB类型的数据。mapper目录存储xml配置文件,用于支持在TableNameMapper.java文件中定义的操作。

将代码和配置文件加入到工程中之后,会出现编译错误,显示一些引用的类不存在于工程中。查找原因,发现是因为项目中没有加入数据库与MyBatis的依赖,修改pom.xml配置文件,加入spring-jdbc、mybatis、mybatis-spring与mysql-connector-java依赖配置。

在src/main/resources加入mybatis-config.xml,用来为MyBatis提供连接数据库的配置与Mapper类集合的配置。创建Mysql.properties文件,将配置写入文件中以便复用。

4.2 数据的清洗

由于原始数据并不能直接拿来使用,因此需要按照之前设计的数据库,将三个表中的原始数据清洗后,存入新设计的表中,程序流程如图4.5所示。

程序会先定义起始和终止图书编号,之后,从第一个图书编号开始,通过主键,查询到图书的数据,将需要的值取出,比如作者信息。作者信息包括了作者国籍、作者姓名以及其它作者姓名,格式如图4.4所示。

img

图4.4 原始数据中部分作者姓名格式

开始打算通过一个完整的正则表达式来对作者信息进行解析,但是由于Java的正则表达式并不能够分辨出中文标点与中文文字,因此,先对字符串做初步的清理:将“编著”、“译者”、“主编”替换为英文斜杠“/”来区分不同的作者,将中英文逗号、中英文括号等内容都替换为英文分号“;”,用于区分国籍与作者。之后,使用将字符串按照斜杠来分割成一个字符串数组,数组中每个字符串代表一个可能带有国家信息的作者名称,使用正则表达式:”^(

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/779756
推荐阅读
相关标签