Jackcard相似度和余弦相似度(向量空间模型)的java实现
版权声明:本文为博主原创文章,地址:http://blog.csdn.net/napoay,转载请留言。
总结Jackcard相似度和余弦相似度。
一、集合的Jackcard相似度
1.1Jackcard相似度
Jaccard相似指数用来度量两个集合之间的相似性,它被定义为两个集合交集的元素个数除以并集的元素个数。
数学公式描述:
这个看似简单的算法有很大的用处,比如:
- 抄袭文档
高明的抄袭者为了掩盖自己抄袭的事实,会选择性的抄袭文档中的一些段落,或者对词语或原始文本中的句序进行改变。jackcard相似度计算适合从字面上进行计算,如果是更高级的抄袭改变了语义jackcard相似度计算就无能为力了 - 镜像页面
多个主机上建立镜像以共享加载内容,同一份内容有多个副本,这种情况实现jackcard相似度计算十分有效。 - 同源新闻稿
一个记者撰写了一份新闻稿件投稿多家媒体,稿件经过少量修改后发布,使用这些同源新闻稿可以用jackcard相似度算法来检测出来
1.2 Java实现
import java.util.HashSet;
import java.util.Map;
import java.util.Set;/*** Created by bee on 17/4/12.*/
public class JackcardSim {public static double calJackcardSim(Set<String> s1, Set<String> s2) {Set<String> all = new HashSet<>();all.addAll(s1);all.addAll(s2);System.out.println(all);Set<String> both = new HashSet<>();both.addAll(s1);both.retainAll(s2);System.out.println(both);return (double) both.size() / all.size();}public static void main(String[] args) {Set<String> s1 = new HashSet<String>();s1.add("互联网");s1.add("金融");s1.add("房产");s1.add("融资");s1.add("科技");Set<String> s2 = new HashSet<String>();s2.add("互联网");s2.add("开源");s2.add("人工智能");s2.add("软件");s2.add("科技");System.out.println(calJackcardSim(s1, s2));}
}
运行结果
[科技, 房产, 软件, 融资, 人工智能, 互联网, 开源, 金融]
[科技, 互联网]
0.25
二、向量空间模型
2.1简介
向量空间模型是一个把文本文件表示为标识符(比如索引)向量的代数模型。它应用于信息过滤、信息检索、索引以及相关排序。
文档和查询都用向量来表示。
2.2、java实现
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;/*** Created by bee on 17/4/10.*/
public class Vsm {public static double calCosSim(Map<String, Double> v1, Map<String, Double>v2) {double sclar = 0.0,norm1=0.0,norm2=0.0,similarity=0.0;Set<String> v1Keys = v1.keySet();Set<String> v2Keys = v2.keySet();Set<String> both= new HashSet<>();both.addAll(v1Keys);both.retainAll(v2Keys);System.out.println(both);for (String str1 : both) {sclar += v1.get(str1) * v2.get(str1);}for (String str1:v1.keySet()){norm1+=Math.pow(v1.get(str1),2);}for (String str2:v2.keySet()){norm2+=Math.pow(v2.get(str2),2);}similarity=sclar/Math.sqrt(norm1*norm2);System.out.println("sclar:"+sclar);System.out.println("norm1:"+norm1);System.out.println("norm2:"+norm2);System.out.println("similarity:"+similarity);return similarity;}public static void main(String[] args) {Map<String, Double> m1 = new HashMap<>();m1.put("Hello", 1.0);m1.put("css", 2.0);m1.put("Lucene", 3.0);Map<String, Double> m2 = new HashMap<>();m2.put("Hello", 1.0);m2.put("Word", 2.0);m2.put("Hadoop", 3.0);m2.put("java", 4.0);m2.put("html", 1.0);m2.put("css", 2.0);calCosSim(m1, m2);}
}
运行结果:
[css, Hello]
sclar:5.0
norm1:14.0
norm2:35.0
similarity:0.22587697572631282
三、参考资料
https://zh.wikipedia.org/wiki/%E5%90%91%E9%87%8F%E7%A9%BA%E9%96%93%E6%A8%A1%E5%9E%8B
http://baike.baidu.com/link?url=enqtEW1bEXe0iZvil1MBk8m2upnfmN118p4cgjNpYdoJYe2l-FC5_s_yYQAq_3GUtiQW0jgwfMMBBxM0U16JiRKeFToPQ0fj058H7P8mHlZ5RV7rERN9Je7jdrYdA3gI7SRMUNTDnNyGoGgBJZN7sq
Jackcard相似度和余弦相似度(向量空间模型)的java实现相关推荐
- 相似度算法余弦相似度
相似度算法余弦相似度 余弦距离,也称作余弦相似度,使用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小度量 余弦值越接近于1,就表明夹角越接近0度,也就是两个向量越接近,这就叫做余弦相似性 ...
- 相似度算法--余弦相似度
转载:http://blog.csdn.net/u012160689/article/details/15341303 余弦距离,也称为余弦相似度,是用向量空间中两个向量夹角的余弦值作为衡量两个个体间 ...
- 相似度计算——余弦相似度
余弦相似度用向量空间中两向量夹角的余弦值作为衡量两个个体之间差异的大小.余弦值越接近1,表明两个向量的夹角越接近0度,则两个向量越相似. 我们把两个向量,向量a和向量b的夹角叫做θ,那么根据余弦定理可 ...
- mysql计算余弦相似度_余弦相似度公式及推导案例
定义 余弦相似度通过测量两个向量的夹角的余弦值来度量它们之间的相似性.0度角的余弦值是1,而其他任何角度的余弦值都不大于1:并且其最小值是-1.从而两个向量之间的角度的余弦值确定两个向量是否大致指向相 ...
- 向量点积衡量相似度_点积相似度、余弦相似度、欧几里得相似度
看starspace的时候发现它实现了dot和cos两种similarity的度量方式,这里总结一下: 余弦相似度衡量两个向量在方向上的相似性,而不care两个向量的实际长度,A和B的长度即使是一个超 ...
- 余弦相似度的计算方法
1.基于用户的协同过滤算法 仅仅基于用户行为数据设计的推荐算法一般称为协同过滤算法.学术界对协同过滤算法 进行了深入研究,提出了很多方法,比如基于邻域的方法(neighborhood-based).隐 ...
- python余弦相似度_python实现字符串余弦相似度算法
字符串余弦相似性算法是通过利用我们初中就学过的三角函数中的余弦定理来计算两个字符串的相似度,它是定义在向量空间模型(Vector Space Model)中的. 余弦相似度用向量空间中两个向量夹角的余 ...
- 通过共现矩阵和余弦相似度实现机器对单词的认知、python实现
通过共现矩阵和余弦相似度实现机器对单词的认知.python实现 本文介绍的定义: 一.语料库预处理 二.单词的分布式表示 三.单词的相似度 四.相似单词排序 本文介绍的定义: 语料库.计数方法的目的. ...
- AI产品经理需要了解的数据知识:余弦相似度
AI产品经理需要了解的数据知识:余弦相似度 本文概括介绍了余弦相似度是什么.如何应用以及案例说明,目的是希望我们产品经理在设计相关跟相似度功能或是利用相似性功能解决某一业务的场景时能利用上余弦相似度, ...
最新文章
- python做电脑软件-程序员带你十天快速入门Python,玩转电脑软件开发(一)
- java socket字符串_Java Socket Bug:从Socket的InputStream读取字符串
- 干得累死,并不见得老板就待见你?
- 深入理解计算机系统 视频教程,深入理解计算机系统1
- Linux—微服务启停shell脚本编写模板
- [BZOJ2038] [2009国家集训队] 小Z的袜子(hose) (莫队)
- 关于Jmeter关联,从概念讲起
- es 使用ik停词_ES使用IK分词器
- 拓端tecdat|R 语言绘制功能富集泡泡图
- qt的qopengl绘制箱子,实现翻转
- 三种css样式应用方式,CSS样式三种形式
- 运用软件配置管理加强风险管理
- 计算机睡眠与休眠有什么区别,小编教你电脑睡眠和休眠的区别是什么.
- SuperMemo POJ - 3580
- LED点阵显示,有关特殊国别(阿拉伯,希伯来,泰文)字符排版和乱码问题解决
- 均值滤波,中值滤波,最大最小值滤波
- 科学计算线性方程组的几个实例
- Tkinter 1. 基本介绍
- Windows——[检测到可能的windows 更新数据库错误]解决方案
- 计算机专业无领导小组面试题,2015年事业单位招聘(无领导小组讨论)面试真题及真题分析(一)...
热门文章
- 离散数学范式c语言实验报告,离散数学实验报告-利用真值表法求主析取范式及主合取范式的实现...
- 开启注解缓存_Spring Boot 2.x基础教程:进程内缓存的使用与Cache注解详解
- mysqldump 忽略视图_mysqldump的使用--解决不能导出视图的问题
- SecureCRT通过密钥进行SSH登录
- 加码IoT生态圈:爱立信携手客户及合作伙伴共筑物联网之梦
- hdu 2842 Chinese Rings 矩阵快速幂
- Debain 安装ssh
- 微信JS-SDK开发:扫一扫接口功能实现
- 在64位Windows 7 激活BitDefender Internet Security 2010
- C++下简单的socket编程