目录
摘要 1
summary 2
一、什么是推荐系统 3
2.1 概念 3
的推荐系统和 3
3.2.1 会员用户表 14
3.2.2 用户订单表 15
3.2.3 商品信息表 16
4.1 项目目录结构 20
每个接口都有注释,很清楚,代码也比较简单。 22
4.4 用户登录接口的实现 25
因为存在着一些数据定是不可用的,所以我们要过滤处理掉之后的数据,就是我们想要的。 29
4.6 二值化数据库处理 31
五、测试结果 32
5.1 用户1推荐结果 32
使用用户id为1的用户登录: 32
得出的结果: 35
按降序{2=1, 1=1},最终拿到的被推荐给当前用户的商品id—>2,1。 35
随着淘宝,京东等电子商务网站的蓬勃发展,消费者越来越多的选择网购.消费者可以在这些电子商务网站上可以获得自己心仪的商品的各种信息.目前淘宝网在电子商务中占有绝对的地位,目前拥有近5亿的注册用户,每天通过电子商务网站上进行购物的消费者有6000万,平均每分钟有4.8万件商品被销售.淘宝是致力于提供基础服务的平台,由其他商家进入进行销售活动.但是对于商家的资格认证没有太多的要求,因此在淘宝里面既有着著名品牌旗舰店,也有普通的商家,从而在淘宝网中如何选择心仪的商品成为了一个非常困难的问题.在消费者的网购调查中可以发现消费者在购物时最注重的是商品的用户评价,因为商品的用户评价可以反映出不同消费者对于商品的真实感观,从而确定商品的综合质量.如何高效的识别出消费者对于所购买的商品的评论情感倾向,对于消费者购买商品有很重要的意义.
本课题主要是通过对商品的评价信息的研究和分析,提出一种新的商品推荐系统,让消费者能够快速选择心仪的商品.本课题主要从以下几个方面进行了分析研究: 针对目前消费者在淘宝网购物的需求和其商品推荐排序不一致的问题进行分析:首先,通过分析消费者的购物心理活动和消费习惯,然后通过淘宝API获取到的商品评价数据进行预处理,计算用户评价信息的情感值;其次,在多属性排序算法的基础上改进,依据各个特征的不同权重比例来进行加权,形成新的商品综合排序算法;最后,构建平台界面展示商品,推荐出消费者心仪的商品. 本课题的研究摒弃了目前淘宝现存在的基于人气,销量,信用,价格等特征的单个因素排序方式和基于这些特征的综合排序方法,避免了由于某些商家通过竞价排名,投机等不良行为获得的排名靠前.同时综合考虑商品的用户评价情感值,销量,商家的信誉等因素,深入分析了各因素之间的关系,创造性地提出了一种基于商品各属性关系的综合商品排序算法.理论分析和实验表明,本课题的研究节省了消费者搜索商品的时间,本文转载自http://www.biyezuopin.vip/onews.asp?id=14591推荐的商品也更加符合消费者的需求,同时抑制了假冒伪劣产品的销售,在实际应用方面具有优越性.
4.5过滤数据接口的实现
因为存在着一些数据定是不可用的,所以我们要过滤处理掉之后的数据,就是我们想要的。
/**
*过滤处理
*@param userRList 所有用户的订单数据
*@param userR 当前登录用户的订单数据
*@return
*/
private String chuli(List userRList,UserR userR) {
//为了方便下面过滤数据,预先把登录用户的订单购物的商品的id做一个map,在过滤的时候,只需要查一下map中 是否存在key就ok
Map map1 = new HashMap<>();
for (int i = 0; i < userR.getProductIds().length; i++) { map1.put(userR.getProductIds()[i],userR.getProductIds()[i]);
}
//盛放最终过滤出来的数据 Map<商品id,出现的次数> Map map = new HashMap<>(); for (int i = 0; i < userRList.size(); i++) {
//userRList.get(i).getCos_th()>0:过滤掉相似度等于0,也就是完全不匹配的
//userRList.get(i).getUserId()!=userR.getUserId():过滤掉当前用户的订单信息if(userRList.get(i).getCos_th()>0 && userRList.get(i).getUserId()!=userR.getUserId()){
//求当前登录用户的购买商品的id和其他用户的所购买商品的差集,例如:A=[1, 2],B=[1, 2, 3] 那么这个3就是最终想要的结果
Integer[] j = QJ.getC(userRList.get(i).getProductIds(), userR.getProductIds());
//遍历求差集之后的结果
for (int i1 = 0; i1 < j.length; i1++) {
//如果其余的用户所购买撒谎那个品的id不在当前用的所购买商品的id,那么就存起来if(!map1.containsKey(j[i1])){
//存储时,数量每次都+1,方便后面排序,出现的次数多,说明被推荐的机会越高map.put(j[i1],map.containsKey(j[i1])?(map.get(j[i1])+1):1);
}
}
}
}
System.out.println("处理之后的map:"); for (Integer key:map.keySet()) {
System.out.println("商品id="+key+"‐‐用户所购数量="+map.get(key));
}
//把map进行降序排序
Map map2 = MapSortUtil.sortByKeyDesc(map); System.out.println("按降序" + map2);
//拼接成一个sql,方便去查数据库
String sqlId = "";
for (Integer key:map2.keySet()) { sqlId = sqlId+key +",";
}
sqlId = sqlId.substring(0,sqlId.length()‐1);
System.out.println("最终拿到的被推荐给当前用户的商品id‐‐‐>"+sqlId); return sqlId;
}