jaccard相似度 java_Jaccard相似度
背景
我们网站有个功能是评价房子的户型的,开放给经纪人使用,但是呢,经纪人为了蹭展示机会,就疯狂的复制粘贴,这样就导致大量无用的信息出现,影响用户体验。之前还好,偶尔有几个人,刷个几十条的算多的了,也就个别处理一下,打电话告知不要做这种操作就结束了。但是最近出现了有预谋有组织的刷榜活动,这就尴尬了,所以必须想办法堵住这种行为。
探索过程
其实之前也想过解决方法,想通过比对文本相似度来做,但是想的有点多,一查资料都是NLP,机器学习之类的。一看就头大,三人小团队,业务都做不过来,还搞AI,想太多了吧。于是也就先放下了。但是呢,之前的调研也给我脑袋里留下了一些必要的概念,比如余弦相似度,逆文档频率等等。
今天遇到这种大量刷的事情又让我想重新思考这方面的解决方法,于是我又查阅了一些资料。最终锁定在余弦相似度和Jaccard相似度上。
简要介绍相似度
这里只阐述我个人的简单的理解,并不是严格的定义。
余弦相似度
把文本向量化之后求向量之间的夹角的余弦值,1说明完全相同,-1说明完全相反。
Jaccard相似度
就是把两个集合的交集除以两个集合的并集。
简单的看集合中的元素是不是大量相同。
解决方案选型
其实我们要应对的问题是经纪人的疯狂复制粘贴。
可能被限制了之后会想着稍微改动一下在发布,而这种情况Jaccard相似度也能很好的处理。只要我设置一个能够接受的相似度阈值就可以灵活控制了。
所以我决定使用Jaccard相似度进行判断即可,从它的计算方法上就可以看出,它只关心相同的元素多不多,也就是说两条评论一样的词是不是很多。
比如我设置阈值为0.5,这意味着什么呢?
就是说他如果复制一条内容有10个字,那么在不删除原来内容的情况下,他要再写10个字以上,并且这些字不能是前面重复的。
是的,你没想错,我就是抛弃了分词,直接以字为单位进行计算。
Jaccard相似度PHP实现1
2
3
4
5
6
7
8
9
10
11* The similarity returned by this algorithm is a number between 0,1
*/
public function (&$A, &$B)
{
$a = array_fill_keys($A,1);
$b = array_fill_keys($B,1);
$intersect = count(array_intersect_key($a,$b));
$union = count(array_fill_keys(array_merge($A,$B),1));
return $intersect/$union;
}
代码很简单就不多解释了,需要说明的就是$A和$B,他们就是两条文本进行分词之后的数组。
分词就是按字分开就好了。(原本是用结巴分词的,但是太耗时,业务也不是非常需要分词,所以弃用了。)
这样一个简单的文本相似度分析功能就实现了。既不会太Low也不会高大上到难以实现。
作为一个普通的技术人,大部分时候技术是服务于业务的。
而是否去实现某个业务功能,以什么方式实现。更多的时候我们要考虑边际成本和边际收益。
够用就好,不是妥协,而是做出合理的决定。
jaccard相似度 java_Jaccard相似度相关推荐
- jaccard相似度 java_jaccard相似度算法
Jaccard index, 又称为Jaccard相似系数(Jaccard similarity coefficient)用于比较有限样本集之间的相似性与差异性.Jaccard系数值越大,样本相似度越 ...
- 关联规则概念、啤酒加尿布引出购物篮分析、频繁项集、支持度+置信度+提升度
关联规则概念.啤酒加尿布引出购物篮分析.频繁项集.支持度+置信度+提升度 目录
- LSTM模型在问答系统中的应用 2017-06-27 21:03 在问答系统的应用中,用户输入一个问题,系统需要根据问题去寻找最合适的答案。 1:采用句子相似度的方式。根据问题的字面相似度选择相似度最
LSTM模型在问答系统中的应用 2017-06-27 21:03 在问答系统的应用中,用户输入一个问题,系统需要根据问题去寻找最合适的答案. 1:采用句子相似度的方式.根据问题的字面相似度选择相似度最 ...
- halcon知识:圆度和紧凑度
一.说明 本文是halcon知识:select_shape究竟怎么用(1)的继续,关于select_shape的用途说的还不够,因为这些属性很多,有必要分开介绍. 二.圆度和紧凑度的直观演示 2.1 ...
- lisp如何将度分秒转换为弧度_地学中常用度、度分、度分秒,弧度、角度在MATLAB中的转换...
地学中常用度.度分.度分秒,弧度.角度在MATLAB中的转换 转化为角度: deg = DMS2DEG(35,20,10) deg = 35.3361 转化为弧度 rad=DMS2RAD(35,20, ...
- mysql置信度支持度,支持度 置信度 提升度
1.支持度(Support) 支持度表示项集{X,Y}在总项集里出现的概率.公式为: Support(X→Y) = P(X,Y) / P(I) = P(X∪Y) / P(I) = num(XUY) / ...
- Python度分秒与度的互转
分享一下自己 # 度转度分秒 def duTdfm(x):d = int(x)f = int((x - d) * 60) / 100s = (x - d - (int((x - d) * 60) / ...
- xps 9360 8250U 过热死机,CPU散热解决方案,日常温度直降30度 ,从 75 度 到 45度。
戴尔2006年正式发售的第一款 XPS 笔记本,名为 XPS M1710 系列,它拥有 17 英寸全高清显示屏.Intel Core Duo(Yonah) T2400(1.83G)处理器最高主频 18 ...
- matlab中度数化成度分秒,地学中常用度、度分、度分秒,弧度、角度在MATLAB中的转换...
地学中常用度.度分.度分秒,弧度.角度在MATLAB中的转换 转化为角度: deg = DMS2DEG(35,20,10) deg = 35.3361 转化为弧度 rad=DMS2RAD(35,20, ...
最新文章
- NLP技术落地为何这么难?里面有哪些坑?
- 安全证书导入到java中的cacerts证书库
- 当技术面试官的一些心得
- cayley 图数据库
- 将一个正方形分成4个大小一样的小正方形,再将其中一个小正方形分成4个小正方形,如此类推,分割n次是几个正方形?
- Linux查看文件和日志的常用命令
- 火币生态链项目SuperNova与Poly Network达成战略合作
- webpack 优化react项目没有解决的问题
- 计组第六章 计算机的运算方法
- 我用Python写了一个做题软件控制台版。(支持Mod)
- python编写脚本方法_python写dnf脚本录制自己点击
- 2021 年“认证杯”网络挑战赛 B 题(第二阶段)
- 零基础一次通过软考网络工程师经验分享
- 为什么投资旅游景区赚钱难?怎样让景区快速盈利?
- redo synch writes在什么情况下发生
- IDEA启动卡在preparing workspace
- 平安科技实习生面试经历
- python画xy轴_python中的坐标轴该如何画?好画吗?
- 618新手必看:电视盒子哪个好?热销网络电视盒子排行榜
- RPA应用案例,泰隆银行引领智慧金融新风向