一、产品定位

1.应用场景

在数据纷杂的时代,各行各业都有着丰富的信息数据,每个人也都在接受数据的冲击,生活的方方面面都离不开纷杂多样的数据。对于文献资料也是如此,文献发表数目逐年增加,这是一种时代和科技的进步。在学术领域和教育事业领域,文献的参考是重要的,如果文献参考和研究的不充分,那么做出自己独特研究的难度就会增加,参考文献就相当于站在巨人的肩膀上继续攀登。随着文献量的不断增加,文献的种类和内容也变得更加全面和宽泛,这显然是有利的,但不可否认,这也展示出一些弊端,学者或研究人员想要快速检索到自己想要查看的文献时需要投入更多的精力在茫茫文献中进行筛选,这显然是一种时间和精力的浪费。在当今文献数量、种类多,学者、研究人员、教育工作者以及学生存在检索时间长、检索质量不高的情况下,我们开发了这款文献推荐与管理的小程序——献文PaperToMe。

2.解决的实际问题

小程序能够主动向用户推荐与其研究方向大体一致或者感兴趣的文献资料,使得他们可以在更短的时间内接触到他们可能关注的方向的文献,并且对感兴趣的文献进行记录和管理,方便用户以后查看,大大节省了用户的检索时间,提高了生产生活效率。

二、需求分析

1 目标用户:

学者、研究人员、教育工作者、高校学生

目前主流文献查询网站都是采用的检索查询的方式,这要求用户有很强的目的性,即用户想要查看时必须主动输入想要查找的内容。这种方式往往精准度高,但使得用户的可选择性降低了很多。文献推荐的方式使得用户有了更多的可选择性,同时采用个性化精准推荐推荐的方式使得精准度也大大提高,这在目前主流文献网站满足的查询功能基础上进一步扩充,有利于提高用户的生产工作效率。

2.功能需求

(1)小程序能够实现对于不同的用户定制不同的推荐内容

(2)用户可对推荐的内容进行行为操作,如点击喜欢、不喜欢、收藏、更多,来表达出用户对于向其推荐的某篇文献的喜好程度。

(3)小程序能够实现对于用户的信息管理,如用户曾经发表过的文章的记录,用户点击喜欢和收藏的文献的信息的记录

(4)当用户有明确的文献需求时,支持用户主动查找文献,即检索一篇指定的文章。

(5)提供“大家都在搜”功能,此功能面向所有用户,记录的信息为所有用户在检索文献时输入的内容,并按搜索频率进行排序

(6)支持用户对于其个人信息的部分更改

(7)支持用户提出自己在使用时的意见和建议,反馈内容将作为提高用户体验时的参考

三、技术方案

1. 总体框架设计图:

gs20Mu.png

系统架构图

2.技术选型

采用前后端分离的开发模式,前端负责将数据按照产品设计渲染以及调用后端接口实现产品功能,后端则提供数据接口。这种开发方式使得我们两人能够各司其职,并且大大降低了数据的耦合性,提高了小程序的性能。

3.开发环境

(1)前端

IDE:微信开发者工具

语言:WXML、WXSS、JS、JSON

(2)后端:

框架:Thinkphp5.0

IDE:Phpstorm、Wampserver、Postman

语言:php

(3)算法:

IDE:PyCharm

语言:python3.6

(4)XML解析:

IDE:IDEA

语言:JAVA

(5)服务端:

CentOS6.10 、phpMyAdmin4.4、MySQL5.5

4.第三方组件

Iconfont-阿里巴巴矢量图标库

5.技术细节

(1)原始推荐数据的获取:

想要实现文献的推荐就必须要存在原始的推荐数据。DBLP数据集按年代列出了作者的科研成果。包括国际期刊和会议等公开发表的论文。DBLP所收录的期刊和会议论文质量较高,并且文献更新速度很快,很好地反应了国外学术研究的前沿方向。因此我们将解析该数据集后的数据作为原始推荐数据。

由于DBLP数据集内数据形式均为XML形式,不适合数据的存储,因此利用JAVA语言针对XML数据进行DOM树的提取,最后将得到的数据逐条存储到MySQL数据库中。该数据集较大,一次性解析无法完全解析,因此采用分批解析的方式,并在解析前去除无效数据、重复数据,最后得到的每条有效数据中存在文献的题目、文献作者、文献的详细信息网址。文献的关键词由Rake分词算法完成。最终得到的原始推荐数据在430万条左右。

gs2tJi.png

DBLP数据集数据样式

gs2Z1L.png

DBLP数据处理

(2)用户画像的获取:

用户画像的获取与推荐算法进行文献的推荐有关联。通过获取用户的部分信息我们能够大体获得用户画像,在获得初始用户画像后不断进行修正继而使得用户画像更加清晰,进而能够实现个性化文献推荐。获取用户部分信息的方式主要是通过用户在初始使用小程序填写的或在个人页进行更改后的ORCID ID的方式。

组织ORCID,或开放研究和贡献ID,创建了独特的标识符(称为ORCID iDs),其任务是通过允许研究人员与他们所有的研究活动相关联,包括出版物、数据集、与研究机构的隶属关系以及资金支持等,进而改善信息流。ORCID是一个非营利组织,个人可以免费注册。许多学者或者研究人员在ORCID官网上都会有注册 ,并对个人相关信息进行了编辑,通过爬取学者或和研究人员的公开信息,我们能够获得该学者或者研究人员的发表论文信息,部分还可获得关键词,这个关键词指出了该学者或研究人员的从事领域以及论文研究方向,该关键词可作为该学者的初始用户画像。对于不存在关键词的学者或者研究人员,我们可通过TextRank分词算法从发表的论文中进行关键词的提取,暂时作为该学者的关键词。

(3)分词算法:TextRank & Rake

TextRank算法由网页重要性排序算法pageRank算法迁移而来,更适用于段落或较长文本分词,所以在用户发表论文中提取用户的关键词作为初始时用户画像时采用该算法。

TextRank具体执行步骤:

(I)把给定的文本T按照完整句子进行分割成多段。

(II)对于每个句子,进行分词和词性标注处理,并过滤掉停用词,只保留指定词性的单词,如名词、动词、形容词。

(III)构建候选关键词图G = (V,E),其中V为节点集,由(2)生成的候选关键词组成,然后采用共现关系(co-occurrence)构造任两点之间的边,两个节点之间存在边仅当它们对应的词汇在长度为K的窗口中共现,K表示窗口大小,即最多共现K个单词。

(IV)依据分词公式,迭代传播各节点的权重,直至收敛。

(V)对节点权重进行倒序排序,从而得到最重要的T个单词,作为候选关键词。

在对解析完的源推荐数据做关键词提取时采用的为Rake算法,该算法相较于中文文本对英文分词效果更加明显。在英文中,关键词通常包括多个单词,但很少包含标点符号和停用词,例如and,the,of等,以及其他不包含语义信息的单词。

wordScore = wordDegree(w) / wordFrequency(w)

词w的得分是该单词的度(每与一个单词共现在一个短语中,度就加1,考虑该单词本身)除以该单词的词频(该单词在该文档中出现的总次数)

Rake具体执行步骤:

(I)首先使用标点符号(如半角的句号、问号、感叹号、逗号等)将一篇文档分成若干分句

(II)对于每一个分句,使用停用词作为分隔符将分句分为若干短语,这些短语作为最终提取出的关键词的候选词。

(III)每个短语可以再通过空格分为若干个单词,可以通过给每个单词赋予一个得分,通过累加得到每个短语的得分

(IV)对于每个候选的关键短语,将其中每个单词的得分累加,并进行排序

(4)推荐算法:

当一开始用户行为信息较少时——基于关键词的推荐算法

由于在处理推荐原始数据时,已进行了文献的关键词提取,同样在获得用户相关初始信息时也进行了关键词的提取作为初始用户画像,并且一开始用户的行为数据缺失,无法构建出测试集,所以一开始使用基于关键词的推荐算法,在进行推荐时,在获取到用户关键词后后端利用正则表达式以及优化的SQL语句在推荐原始数据中进行模糊匹配,相似度较大的 可作为初始的推荐数据,随着向用户推荐的数据量增加,用户的行为数据也在不断增加,此时可再采用第二种推荐策略。

gs2wbW.png

I.当用户在使用小程序时输入ORCID ID

gs2fKw.png

II.当用户在使用小程序时未输入ORCID ID

**当用户行为数据到达一定数量时——基于最近临的协同过滤推荐算法**

在用户使用小程序时,用户的所有行为都会被记录,这些行为数据会在后端处理成为数字数据,如用户对于某篇推荐的文献点击了喜欢,此时后端就会对用户推荐的这篇文献赋予数值3,相同道理,点击更多数值为2,不喜欢为1,收藏为4,这些数字数据是协同推荐算法在使用时的重要依据。

每次找出10个最近或者最为相似的邻居,进而找到相关用户或相关论文,从而进行推荐。考虑到用户基线评级的影响。预测算法公式为

gs2IeR.png

预测算法公式

相似度参数采用皮尔逊相关系数: gs2ih8.png

皮尔逊相关系数

一开始使用基于关键词的推荐算法可避免推荐系统中常见的“冷启动”问题,随着用户数据的不断增加,基于最近临的协同过滤算法又使得推荐效果得到大大提高。

(5)PHP的异步非阻塞实现:

当用户首次输入自己的ORCID ID或再次更换ORCID ID时,用Python爬虫从ORCID官网爬取数据有点慢,若让用户等待的话,影响用户体验,而PHP本身不支持多线程,为了实现异步,这里使用PHP的fsockopen()打开一个网络连接或者一个Unix套接字连接,再用stream_set_blocking()设置资源成非阻塞模式请求,则该资源请求会是非阻塞的。之后都用异步非阻塞的方式,实现异步调用Python爬虫和分词算法以及论文推荐算法。

四、小程序特色

1.推荐算法采用基于关键词以及协同过滤的推荐算法,有效解决了推荐场景中出现的冷启动问题,并且有不错的推荐效果。

2.将推荐算法应用到文献领域想法创新,并且有很大的实用性。

3.小程序采用前后端分离的开发方式,有利于系统整体的维护和升级。

4.小程序前端简洁大方,界面友好。

五、交互设计

前端界面整体设计理念是简洁大方、友好舒适。标题栏背景色为淡绿色,十六进制颜色码为#17c2a4,内容部分背景为灰白色,十六进制颜色码为#fff,页面整体饱和度相对较低,用户在连续使用时不容易产生眼睛疲劳的现象。

gs2nLg.png

推荐页

在一些需要用户输入信息的地方,设置了输入检查,如输入ORCID ID 时,用户若输入的格式不对或者不存在的ORCID ID或者已被其他人绑定的ORCID ID时,系统都会给出提示并且指出错误原因。 gs2lwX.png

输入ORCID ID错误

当用户之前从未使用过该小程序,用户第一次登录会在进入推荐页之前存在一个ORCID ID 绑定页,用户若拥有自己的ORCID ID,可在此时填写,填写后我们将按照该ORCID ID的信息做相关推荐,若用户未拥有或未填写,用户也可进入推荐页。不论用户是否进行ORCID ID 的填写,该页面只存在于用户第一次使用小程序时显示,之后不会在进行显示,大大提高了用户的使用体验。若用户之后想再次进行绑定或者修改之前绑定的,可在个人页修改。 gs2uAG.png

用户首次使用的登录页

在推荐页,每次向用户推荐10篇文献,当用户查看完之后想要查看更多文献时,支持用户执行下拉刷新以及上拉加载动作,两种方式都可实现推荐列表的刷新,使得用户操作更加方便和多元化。 gs2CFy.png

上拉加载中

对于每条推荐数据,系统默认向用户显示的只有文献的题目、文献的作者、文献的关键词,当用户对于某篇文献想要了解到它的更多内容时,可点击最右侧的“更多”按钮。由于个人版小程序暂不支持web-view标签的使用,无法直接在小程序内部直接进行非业务域名的直接跳转。并且向用户直接展示详细信息网址的方式违背了我们的设计初衷,对用户变得不友好。因此当用户点击更多时,我们将该文献的详细信息网址直接复制到用户手机的输入法粘贴板上,用户此时只需打开设备浏览器在搜索栏将输入法中的内容复制直接进行访问即可。 gs2mJj.png

网址已复制到输入法剪切板

在查找页支持用户输入内容查找相关文献,并且会提供“大家都在搜”功能,向用户展示当前小程序所有使用者搜索频率最高的几个搜索内容。当然用户在进行搜索时,我们会对用户的输入信息做一些必要限制,如用户输入的所有字符中不能全为空格。数据库中的推荐原始数据均为英文,所以用户不能输入内容中不能含有中文字符。 gs214c.png

查找页

## 六、系统运维

1.首先确保小程序的安全性与稳定性,对于用户的相关信息如绑定的ORCID ID、个人头像信息等妥善保管。

2.做好系统的业务运维,虚心接受用户意见并及时做出合理更改。由于我们在小程序中增加了“我的建议”功能,用户在使用中若存在任何不满或者意见,可以直接提交个人的想法与建议,我们也会认真查看,以用户为中心。

3.协调好维护成员间的分工,使之各司其责,提高效率,避免做无用功。

七、部分测试数据

ORCID ID:

0000-0002-0135-5423 0000-0002-2668-934X

0000-0002-5772-2878 0000-0001-5578-236X

0000-0002-9918-8212 0000-0001-8538-2877

0000-0003-3392-4229 0000-0003-1195-438X

0000-0002-9669-9500 0000-0002-3716-2455

相关文章
评论
分享
  • Windows下neo4j的安装

    neo4j是一个高性能的NOSQL图形数据库,他将结构化数据存储在网络上而不是表中。他是一个嵌入式的、基于磁盘的、具备完全的事物特性的Java持久化引擎,neo4j也可看做是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。——百度...

    Windows下neo4j的安装
  • java实现类FTP程序

    继承程序设计实验,实验说明如图所示: 集成程序设计实验 TCP实现首先说明下基于TCP实现的功能: (1)能够实现多用户的同时连接 (2)用户执行成功的命令会在其他用户终端上显式说明 (3)当前用户数以及在线情况会在服务端实时显...

    java实现类FTP程序
  • Java中的流

    流是个抽象的概念,是对输入输出设备的抽象,Java程序中,对于数据的输入输出都是以流的方式进行。设备可以是文件、网络、内存等。 I/O字节流InputStream字节输入流OutputStream字节输出流用于以字节的形式读取和写入数...

    Java中的流
  • eclipse使用

    Eclipse是一个开放源代码的、基于Java的可拓展开发平台。 常用快捷键 快捷键 作用 alt+/ 代码快速补全 ctrl+1 快速修复 ctrl+shift+f 代码格式化 ctrl+d 删除一行代码 ...

    eclipse使用
  • Python网络编程

    网络编程从大的方面说就是对信息的发送到接收,中间传输为物理线路的作用。 它的含义是使用套接字来达到进程间的通信。套接字可以看成是两个网络应用程序进行通信时,各自通信连接中的一个端点。 套接字Socket=(IP地址:端口号) 端口号是...

    Python网络编程
  • Centos安装

    虚拟机下载及安装1.进入VMware官网,转到下载页面 https://my.vmware.com/cn/web/vmware/info/slug/desktop_end_user_computing/vmware_workstati...

    Centos安装
  • JavaEE开发准备

    个人电脑硬件配置: Windows 10 64位家庭中文版 8G运行内存 Intel(R) Core(TM) i5-7300HQ CPU @ 2.50GHz 1.Java JDK安装及配置(1)下载和安装首先进入oracle网站中Ja...

    JavaEE开发准备
  • Python进阶学习

    假期补习补习Python,防止以后用到炸锅。 闭包在Python语言中,一切皆对象。 闭包:一个函数定义中引用了函数外定义的变量,并且该函数可以在其定义环境外被执行。 闭包 = 函数 + 环境变量 123456789101...

    Python进阶学习
  • 推荐算法研究(一)

    推荐算法大体分为3类:基于系统过滤的推荐、基于内容的推荐、混合推荐 1.基于协同过滤的推荐系统(Collaborative Filtering)使用行为数据,利用集体智慧来推荐。属于有监督学习。基于用户的协同过滤(找和你兴趣相似的人所...

    推荐算法研究(一)
  • dart中HTTP请求的处理

    dio是一个强大的Dart Http请求库,支持Restful API、FormData、拦截器、请求取消、Cookie管理、文件上传/下载、超时、自定义适配器等… ,最重要的是国人开发,牛皮。 (1)添加dio库 找到项目中的pu...

    dart中HTTP请求的处理
Please check the comment setting in config.yml of hexo-theme-Annie!