文本相似度比较有很多方法,如余弦夹角算法、欧式距离、Jaccard相似度、最长公共子串、编辑距离等,海明距离是其中之一。

在信息编码中,两个合法代码对应位上编码不同的位数称为码距,又称海明距离。

n位的码字可以用n维空间的超立方体的一个顶点来表示。两个码字之间的海明距离就是超立方体两个顶点之间的一条边,而且是这两个顶点之间的最短距离。

对海明距离的应用,最多的是在海量短文本去重上,性能优,主要方法就是对文本进行向量化,或者说把文本的特征抽取出来映射成编码,然后再对编码进行异或计算出海明距离。

曾遇到的一个场景是:从庞大的记录文本中,判断文本的相似度并做分类。一般做法就是两两比较相似度,这时对相似度计算算法的耗时要求就比较高,一旦数据量庞大,就能立见高下。有兴趣的,可以试验下cos、欧式、海明三者在文本相似度判断方面的性能,比如2000万记录的文本。

本文这里的代码只是简单的模拟了海明距离的计算过程,参考如下:

package sk.ml;/** 功能:计算两个文本海明距离
         先字符串二进制,再统计差异位数
 * 作者:Jason.F* 时间:2017年1月18日*/public class HammingDistance {public static void main(String[] args) {String strA="大数据和人工智能";String strB="小数据和人工智能";String strAB=StrToBinstr(strA);String strBB=StrToBinstr(strB);//对两个二进制字符串,字符数相同,统计差异数int count=0;int len=strAB.length();for(int i=0;i<len;i++){if(strAB.charAt(i)!=strBB.charAt(i)) count++;}System.out.println("海明距离是:"+count);}//将字符串转换成二进制字符串,以空格相隔public static String StrToBinstr(String str) {char[] strChar=str.toCharArray();String result="";for(int i=0;i<strChar.length;i++){result +=Integer.toBinaryString(strChar[i]);}return result;}
}

执行结果:

海明距离是:4

Java实现海明距离简单计算相关推荐

  1. JAVA利用海明距离测算文本相似度

    算法介绍: SimHash也即相似hash,是一类特殊的信息指纹,常用来比较文章的相似度,与传统hash相比,传统hash只负责将原始内容尽量随机的映射为一个特征值,并保证相同的内容一定具有相同的特征 ...

  2. XTU 1102海明距离

    题目 Description 海明距离是在指二进制情况下,一个整数变成另外一个整数需要翻转的位数.比如2转换到3需要翻转1位,所以2到3的海明距离是1.给你两个正整数x和y,(x,y<=1,00 ...

  3. 海量数据相似度计算之simhash和海明距离

    通过 采集系统 我们采集了大量文本数据,但是文本中有很多重复数据影响我们对于结果的分析.分析前我们需要对这些数据去除重复,如何选择和设计文本的去重算法?常见的有余弦夹角算法.欧式距离.Jaccard相 ...

  4. 【转】海量数据相似度计算之simhash和海明距离

    2019独角兽企业重金招聘Python工程师标准>>> 通过 采集系统 我们采集了大量文本数据,但是文本中有很多重复数据影响我们对于结果的分析.分析前我们需要对这些数据去除重复,如何 ...

  5. simhash mysql_海量数据相似度计算之simhash和海明距离

    通过 采集系统 我们采集了大量文本数据,但是文本中有很多重复数据影响我们对于结果的分析.分析前我们需要对这些数据去除重复,如何选择和设计文本的去重算法?常见的有余弦夹角算法.欧式距离.Jaccard相 ...

  6. Python简单匹配相关系数SMC、JAC及L1、L2、Lr、L无穷范式、余弦相似度、jac距离重叠程度、海明距离

    1.简单匹配相关系数SMC def smc(x,y):s=0for i in range(len(x)):if x[i]==y[i]:s+=1return s/len(x) m=[0,1,0,0,1, ...

  7. java 点与线的距离_计算地图上点与线段距离

    将地球看做一个标准球体,计算点到线段的距离. 计算两点间的球面距离 /** * * a点经度,a点纬度,b点经度,b点纬度 * */ public static double calcP2P(doub ...

  8. java中怎么引用圆周率_Java简单计算圆周率完整示例

    本文实例讲述了java简单计算圆周率.分享给大家供大家参考,具体如下: 这两天在网上看到一个题,已知pi可以用函数4 * (1 – 1/3 + 1/5 – 1/7 + -) 计算,计算出小数点后五位( ...

  9. Java 用键盘输入 int型 String型 char型数据 示例:简单计算功能 eclipse

    //Scanner input = new Scanner(System.in); 用键盘输入不同类型的数据: int型数据 = input.nextInt(): String型字符串 = input ...

最新文章

  1. python学习之掷骰子游戏
  2. 限制ALV报表的导出权限
  3. java学习笔记(4)
  4. 左神算法课笔记(二):链表、栈和队列、递归Master公式、哈希表、有序表
  5. 请求solr服务器未响应,solr与tomcat整合
  6. LeetCode 467. 环绕字符串中唯一的子字符串(思维转换)
  7. JavaScript 事件:Web 表单如何实现禁用右键、复制粘贴/剪切和输入框自动填充?
  8. 医院计算机网络信息安全与管理,医院信息安全管理制度网络版(全文完整版)...
  9. 微信接口API之长链接转短链接代码示例
  10. 哪种方式的电子签名更可靠?
  11. 蓝牙技术|AirPods Pro 2 支持蓝牙 LE Audio 技术带来的 5 大好处
  12. 免费|PDF文档翻译
  13. CMNET和CMWAP简单区别
  14. 软件开发的能力体系及锻炼
  15. 实验:使用SSMS创建并管理数据库及其基本表(代码版)
  16. 携手Nutanix,AMD EPYC服务器打造全新超融合生态
  17. C# PictureBox 图片自适应
  18. Java学习--day02---运算,一些重要的程序
  19. matlab vvvs电机,MATLAB/Simulink在控制系统仿真与CAD应用(一)
  20. 二进制与十进制数互相转换的方法及原理

热门文章

  1. GitBash上传项目出现[fatal: remote origin already exists.]问题解决方案
  2. 数据结构学习-带头结点的单链表就地逆置
  3. python学习第二课要点记录
  4. Mycat探索之旅(3)----Mycat的全局序列号
  5. 豪华版飞机大战系列(六)--附源代码
  6. shell__常用命令__awk
  7. USB学习5---android usb驱动源代码目录说明
  8. uboot环境变量实现分析
  9. WINCE6.0+S3C2443自动重启的实现
  10. python无法打印unicode编码_【整理】Python中实际上已经得到了正确的Unicode或某种编码的字符,但是看起来或打印出来却是乱码...