所在的位置: js >> js优势 >> Springbootvuejs协同

Springbootvuejs协同

美丽的黄皮肤爱心援助工程 http://news.39.net/bjzkhbzy/180501/6204493.html

针对海量的新闻资讯数据,如何快速的根据用户的检索需要,完成符合用户阅读需求的新闻资讯推荐?本篇文章主要采用余弦相似度及基于用户协同过滤算法实现新闻推荐,通过余弦相似度算法完成针对不同新闻数据之间的相似性计算,实现分类标签。通过协同过滤算法发现具备相似阅读习惯的用户,展开个性化推荐。

本次新闻推荐系统:

主要包含技术:springboot,mybatis,mysql,javascript,vue.js,html,css

主要包含算法:余弦相似度,基于用户协同过滤推荐

一、系统设计

系统采用前后端分离的开发模式完成,系统前端主要采用Vue.js,javascript,html,CSS等技术实现。系统后端框架采用springboot+mybatis+mysql数据库搭建,针对海量的新闻资讯数据采用分表操作,完成数据存储分析。系统前后端数据交互,采用Ajax异步调用传输JSON实现。系统架构主要分为基础数据存储,新闻资讯爬虫,新闻分析计算,新闻网站前端四个层面,其中爬虫主要定时采集互联网各大新闻网站的公开资讯数据,完成数据清洗,过滤等操作。系统主要架构设计如下如:

二、效果实现

###登录界面

###系统主页

###推荐列表

###新闻搜索

###新闻详情

###浏览历史

其他效果省略

三、系统算法介绍

###余弦相似度算法

余弦相似度,又称为余弦相似性,是通过计算两个向量的夹角余弦值来评估他们的相似度。余弦相似度将向量根据坐标值,绘制到向量空间中,如最常见的二维空间。

余弦相似度衡量的是2个向量间的夹角大小,通过夹角的余弦值表示结果,因此2个向量的余弦相似度为:

分子为向量A与向量B的点乘,分母为二者各自的L2相乘,即将所有维度值的平方相加后开方。

余弦相似度的取值为[-1,1],值越大表示越相似。

余弦相似度java代码实现

```java

publicstaticdoublegetSimilarity(Stringdoc1,Stringdoc2){

if(doc1!=nulldoc1.trim().length()0doc2!=nulldoc2.trim().length()0){

MapInteger,int[]AlgorithmMap=newHashMapInteger,int[]();

//将两个字符串中的中文字符以及出现的总数封装到,AlgorithmMap中

for(inti=0;idoc1.length();i++){

chard1=doc1.charAt(i);

if(isHanZi(d1)){//标点和数字不处理

intcharIndex=getGBId(d1);//保存字符对应的GB编码

if(charIndex!=-1){

int[]fq=AlgorithmMap.get(charIndex);

if(fq!=nullfq.length==2){

fq[0]++;//已有该字符,加1

}else{

fq=newint[2];

fq[0]=1;

fq[1]=0;

AlgorithmMap.put(charIndex,fq);//新增字符入map

}

}

}

}

for(inti=0;idoc2.length();i++){

chard2=doc2.charAt(i);

if(isHanZi(d2)){

intcharIndex=getGBId(d2);

if(charIndex!=-1){

int[]fq=AlgorithmMap.get(charIndex);

if(fq!=nullfq.length==2){

fq[1]++;

}else{

fq=newint[2];

fq[0]=0;

fq[1]=1;

AlgorithmMap.put(charIndex,fq);

}

}

}

}

IteratorIntegeriterator=AlgorithmMap.keySet().iterator();

doublesqdoc1=0;

doublesqdoc2=0;

doubledenominator=0;

while(iterator.hasNext()){

int[]c=AlgorithmMap.get(iterator.next());

denominator+=c[0]*c[1];

sqdoc1+=c[0]*c[0];

sqdoc2+=c[1]*c[1];

}

doublev=denominator/Math.sqrt(sqdoc1*sqdoc2);//余弦计算

v=Double.isNaN(v)?0d:v;

returnv;

}else{

thrownewNullPointerException("theDocumentisnullorhavenotcahrs!!");

}

}

```

###协同过滤推荐算法

协同过滤算法是一个大类,主要有基于用户、基于物品、两者结合等分支,这里我主要介绍的是基于用户的协同过滤算法。主要的思想也很简单,中国有一句俗语“物以类聚,人以群分”,我们可以有很大的把握认为一个和你很相似的用户喜欢的物品也大概率也是你喜欢的物品,这就是基于用户的协同过滤推荐算法的思想。实现基于用户协同过滤推荐,主要包含以下几个步骤:

1.计算用户相似度

2.获取需要推荐给用户的物品(本系统内主要是新闻数据)

基于用户协同推荐算法实现

```java

/***

*协同过滤算法

*1.找到与目标用户兴趣相似的用户集合

*2.找到这个集合中用户喜欢的、并且目标用户没有听说过的新闻推荐给目标用户

*

paramuserInfos

*

paramre


转载请注明:http://www.aierlanlan.com/grrz/1305.html