利用word分词来计算文本相似度
word分词提供了多种文本相似度计算方式:
方式一:余弦相似度,通过计算两个向量的夹角余弦值来评估他们的相似度
实现类:org.apdplat.word.analysis.CosineTextSimilarity
用法如下:
String text1 = "我爱购物";
String text2 = "我爱读书";
String text3 = "他是黑客";
TextSimilarity textSimilarity = new CosineTextSimilarity();
double score1pk1 = textSimilarity.similarScore(text1, text1);
double score1pk2 = textSimilarity.similarScore(text1, text2);
double score1pk3 = textSimilarity.similarScore(text1, text3);
double score2pk2 = textSimilarity.similarScore(text2, text2);
double score2pk3 = textSimilarity.similarScore(text2, text3);
double score3pk3 = textSimilarity.similarScore(text3, text3);
System.out.println(text1+" 和 "+text1+" 的相似度分值:"+score1pk1);
System.out.println(text1+" 和 "+text2+" 的相似度分值:"+score1pk2);
System.out.println(text1+" 和 "+text3+" 的相似度分值:"+score1pk3);
System.out.println(text2+" 和 "+text2+" 的相似度分值:"+score2pk2);
System.out.println(text2+" 和 "+text3+" 的相似度分值:"+score2pk3);
System.out.println(text3+" 和 "+text3+" 的相似度分值:"+score3pk3);
运行结果如下:
我爱购物 和 我爱购物 的相似度分值:1.0
我爱购物 和 我爱读书 的相似度分值:0.67
我爱购物 和 他是黑客 的相似度分值:0.0
我爱读书 和 我爱读书 的相似度分值:1.0
我爱读书 和 他是黑客 的相似度分值:0.0
他是黑客 和 他是黑客 的相似度分值:1.0
方式二:简单共有词,通过计算两篇文档有多少个相同的词来评估他们的相似度
实现类:org.apdplat.word.analysis.SimpleTextSimilarity
用法如下:
String text1 = "我爱购物";
String text2 = "我爱读书";
String text3 = "他是黑客";
TextSimilarity textSimilarity = new SimpleTextSimilarity();
double score1pk1 = textSimilarity.similarScore(text1, text1);
double score1pk2 = textSimilarity.similarScore(text1, text2);
double score1pk3 = textSimilarity.similarScore(text1, text3);
double score2pk2 = textSimilarity.similarScore(text2, text2);
double score2pk3 = textSimilarity.similarScore(text2, text3);
double score3pk3 = textSimilarity.similarScore(text3, text3);
System.out.println(text1+" 和 "+text1+" 的相似度分值:"+score1pk1);
System.out.println(text1+" 和 "+text2+" 的相似度分值:"+score1pk2);
System.out.println(text1+" 和 "+text3+" 的相似度分值:"+score1pk3);
System.out.println(text2+" 和 "+text2+" 的相似度分值:"+score2pk2);
System.out.println(text2+" 和 "+text3+" 的相似度分值:"+score2pk3);
System.out.println(text3+" 和 "+text3+" 的相似度分值:"+score3pk3);
运行结果如下:
我爱购物 和 我爱购物 的相似度分值:1.0
我爱购物 和 我爱读书 的相似度分值:0.5
我爱购物 和 他是黑客 的相似度分值:0.0
我爱读书 和 我爱读书 的相似度分值:1.0
我爱读书 和 他是黑客 的相似度分值:0.0
他是黑客 和 他是黑客 的相似度分值:1.0
方式三:编辑距离,通过计算两个字串之间由一个转成另一个所需的最少编辑操作次数来评估他们的相似度
实现类:org.apdplat.word.analysis.EditDistanceTextSimilarity
用法如下:
String text1 = "我爱购物";
String text2 = "我爱读书";
String text3 = "他是黑客";
Similarity textSimilarity = new EditDistanceTextSimilarity();
double score1pk1 = textSimilarity.similarScore(text1, text1);
double score1pk2 = textSimilarity.similarScore(text1, text2);
double score1pk3 = textSimilarity.similarScore(text1, text3);
double score2pk2 = textSimilarity.similarScore(text2, text2);
double score2pk3 = textSimilarity.similarScore(text2, text3);
double score3pk3 = textSimilarity.similarScore(text3, text3);
System.out.println(text1+" 和 "+text1+" 的相似度分值:"+score1pk1);
System.out.println(text1+" 和 "+text2+" 的相似度分值:"+score1pk2);
System.out.println(text1+" 和 "+text3+" 的相似度分值:"+score1pk3);
System.out.println(text2+" 和 "+text2+" 的相似度分值:"+score2pk2);
System.out.println(text2+" 和 "+text3+" 的相似度分值:"+score2pk3);
System.out.println(text3+" 和 "+text3+" 的相似度分值:"+score3pk3);
运行结果如下:
我爱购物 和 我爱购物 的相似度分值:1.0
我爱购物 和 我爱读书 的相似度分值:0.5
我爱购物 和 他是黑客 的相似度分值:0.0
我爱读书 和 我爱读书 的相似度分值:1.0
我爱读书 和 他是黑客 的相似度分值:0.0
他是黑客 和 他是黑客 的相似度分值:1.0
方式四:SimHash + 汉明距离,先使用SimHash把不同长度的文本映射为等长文本,然后再计算等长文本的汉明距离
实现类:org.apdplat.word.analysis.SimHashPlusHammingDistanceTextSimilarity
用法如下:
String text1 = "我爱购物";
String text2 = "我爱读书";
String text3 = "他是黑客";
TextSimilarity textSimilarity = new SimHashPlusHammingDistanceTextSimilarity();
double score1pk1 = textSimilarity.similarScore(text1, text1);
double score1pk2 = textSimilarity.similarScore(text1, text2);
double score1pk3 = textSimilarity.similarScore(text1, text3);
double score2pk2 = textSimilarity.similarScore(text2, text2);
double score2pk3 = textSimilarity.similarScore(text2, text3);
double score3pk3 = textSimilarity.similarScore(text3, text3);
System.out.println(text1+" 和 "+text1+" 的相似度分值:"+score1pk1);
System.out.println(text1+" 和 "+text2+" 的相似度分值:"+score1pk2);
System.out.println(text1+" 和 "+text3+" 的相似度分值:"+score1pk3);
System.out.println(text2+" 和 "+text2+" 的相似度分值:"+score2pk2);
System.out.println(text2+" 和 "+text3+" 的相似度分值:"+score2pk3);
System.out.println(text3+" 和 "+text3+" 的相似度分值:"+score3pk3);
运行结果如下:
我爱购物 和 我爱购物 的相似度分值:1.0
我爱购物 和 我爱读书 的相似度分值:0.95
我爱购物 和 他是黑客 的相似度分值:0.83
我爱读书 和 我爱读书 的相似度分值:1.0
我爱读书 和 他是黑客 的相似度分值:0.86
他是黑客 和 他是黑客 的相似度分值:1.0
方式五:Jaccard相似性系数,通过计算两个集合交集的大小除以并集的大小来评估他们的相似度
实现类:org.apdplat.word.analysis.JaccardTextSimilarity
用法如下:
String text1 = "我爱购物";
String text2 = "我爱读书";
String text3 = "他是黑客";
TextSimilarity textSimilarity = new JaccardTextSimilarity();
double score1pk1 = textSimilarity.similarScore(text1, text1);
double score1pk2 = textSimilarity.similarScore(text1, text2);
double score1pk3 = textSimilarity.similarScore(text1, text3);
double score2pk2 = textSimilarity.similarScore(text2, text2);
double score2pk3 = textSimilarity.similarScore(text2, text3);
double score3pk3 = textSimilarity.similarScore(text3, text3);
System.out.println(text1+" 和 "+text1+" 的相似度分值:"+score1pk1);
System.out.println(text1+" 和 "+text2+" 的相似度分值:"+score1pk2);
System.out.println(text1+" 和 "+text3+" 的相似度分值:"+score1pk3);
System.out.println(text2+" 和 "+text2+" 的相似度分值:"+score2pk2);
System.out.println(text2+" 和 "+text3+" 的相似度分值:"+score2pk3);
System.out.println(text3+" 和 "+text3+" 的相似度分值:"+score3pk3);
运行结果如下:
我爱购物 和 我爱购物 的相似度分值:1.0
我爱购物 和 我爱读书 的相似度分值:0.5
我爱购物 和 他是黑客 的相似度分值:0.0
我爱读书 和 我爱读书 的相似度分值:1.0
我爱读书 和 他是黑客 的相似度分值:0.0
他是黑客 和 他是黑客 的相似度分值:1.0
方式六:欧几里得距离(Euclidean Distance),通过计算两点间的距离来评估他们的相似度
实现类:org.apdplat.word.analysis.EuclideanDistanceTextSimilarity
用法如下:
String text1 = "我爱购物";
String text2 = "我爱读书";
String text3 = "他是黑客";
TextSimilarity textSimilarity = new EuclideanDistanceTextSimilarity();
double score1pk1 = textSimilarity.similarScore(text1, text1);
double score1pk2 = textSimilarity.similarScore(text1, text2);
double score1pk3 = textSimilarity.similarScore(text1, text3);
double score2pk2 = textSimilarity.similarScore(text2, text2);
double score2pk3 = textSimilarity.similarScore(text2, text3);
double score3pk3 = textSimilarity.similarScore(text3, text3);
System.out.println(text1+" 和 "+text1+" 的相似度分值:"+score1pk1);
System.out.println(text1+" 和 "+text2+" 的相似度分值:"+score1pk2);
System.out.println(text1+" 和 "+text3+" 的相似度分值:"+score1pk3);
System.out.println(text2+" 和 "+text2+" 的相似度分值:"+score2pk2);
System.out.println(text2+" 和 "+text3+" 的相似度分值:"+score2pk3);
System.out.println(text3+" 和 "+text3+" 的相似度分值:"+score3pk3);
运行结果如下:
我爱购物 和 我爱购物 的相似度分值:1.0
我爱购物 和 我爱读书 的相似度分值:0.41
我爱购物 和 他是黑客 的相似度分值:0.29
我爱读书 和 我爱读书 的相似度分值:1.0
我爱读书 和 他是黑客 的相似度分值:0.29
他是黑客 和 他是黑客 的相似度分值:1.0
方式七:曼哈顿距离(Manhattan Distance),通过计算两个点在标准坐标系上的绝对轴距总和来评估他们的相似度
实现类:org.apdplat.word.analysis.ManhattanDistanceTextSimilarity
用法如下:
String text1 = "我爱购物";
String text2 = "我爱读书";
String text3 = "他是黑客";
TextSimilarity textSimilarity = new ManhattanDistanceTextSimilarity();
double score1pk1 = textSimilarity.similarScore(text1, text1);
double score1pk2 = textSimilarity.similarScore(text1, text2);
double score1pk3 = textSimilarity.similarScore(text1, text3);
double score2pk2 = textSimilarity.similarScore(text2, text2);
double score2pk3 = textSimilarity.similarScore(text2, text3);
double score3pk3 = textSimilarity.similarScore(text3, text3);
System.out.println(text1+" 和 "+text1+" 的相似度分值:"+score1pk1);
System.out.println(text1+" 和 "+text2+" 的相似度分值:"+score1pk2);
System.out.println(text1+" 和 "+text3+" 的相似度分值:"+score1pk3);
System.out.println(text2+" 和 "+text2+" 的相似度分值:"+score2pk2);
System.out.println(text2+" 和 "+text3+" 的相似度分值:"+score2pk3);
System.out.println(text3+" 和 "+text3+" 的相似度分值:"+score3pk3);
运行结果如下:
我爱购物 和 我爱购物 的相似度分值:1.0
我爱购物 和 我爱读书 的相似度分值:0.33
我爱购物 和 他是黑客 的相似度分值:0.14
我爱读书 和 我爱读书 的相似度分值:1.0
我爱读书 和 他是黑客 的相似度分值:0.14
他是黑客 和 他是黑客 的相似度分值:1.0
利用word分词来计算文本相似度相关推荐
- 利用word分词通过计算词的语境来获得相关词
我们如何通过计算词的语境来获得相关词呢? 语境的定义是:在一段文本中,任意一个词的语境由它的前N个词和后N个词组成. 相关词的定义是:如果两个词的语境越相似,那么这两个词就越相似,也就越相关. 算法由 ...
- java 分词词频_利用word分词来对文本进行词频统计
标签: 命令行脚本的调用方法如下: 将需要统计词频的文本写入文件:text.txt chmod +x wfs.sh & wfs.sh -textFile=text.txt -statistic ...
- 使用simhash计算文本相似度
1. 使用simhash计算文本相似度 2. 使用余弦相似度计算文本相似度 3. 使用编辑距离计算文本相似度 4. jaccard系数计算文本相似度 文本相似度计算常用于网页去重以及NLP里文本分析等 ...
- 使用余弦相似度算法计算文本相似度-数学
20211201 也就是效果 皮尔逊>余弦>欧式 余弦相似度的局限 皮尔逊的优势,相当于是改进版余弦相似度 欧式与 余弦 欧式侧重于直线距离 归一化之后的欧式和余弦的效果也不同 比如 0, ...
- 使用gensim计算文本相似度
使用gensim计算文本相似度 计算文本相似度步骤逻辑 1.将文本数据,通过jieba分词进行处理,形成一个二维数组 2.将二维数组生成词典 3.将二维数组通过doc2bow稀疏向量,形成语料库 4. ...
- 自然语言处理(NLP)之使用TF-IDF模型计算文本相似度
自然语言处理(NLP)之使用TF-IDF模型计算文本相似度 所用数据集:ChnSentiCorp_htl_all.csv 语料库即存放稀疏向量的列表. 要注意的是,搜索文本text与被检索的文档共用一 ...
- 使用余弦相似度计算文本相似度
1. 使用simhash计算文本相似度 2. 使用余弦相似度计算文本相似度 3. 使用编辑距离计算文本相似度 4. jaccard系数计算文本相似度 2.向量余弦计算文本相似度 2.1 原理 余弦相似 ...
- 使用编辑距离计算文本相似度
1. 使用simhash计算文本相似度 2. 使用余弦相似度计算文本相似度 3. 使用编辑距离计算文本相似度 4. jaccard系数计算文本相似度 3. 最小编辑距离计算文本相似度 3.1 编辑距离 ...
- ML之SIFT_FLANN:FLANN算法的简介、使用方法(对图片提取SIFT特征并利用FLANN方法实现计算图像相似度并可视化案例)之详细攻略
ML之SIFT_FLANN:FLANN算法的简介.使用方法(对图片提取SIFT特征并利用FLANN方法实现计算图像相似度并可视化案例)之详细攻略 目录 FLANN算法 1.flann的搜索步骤 (1) ...
最新文章
- 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 F Color it
- Linux系统下常见性能分析工具的使用
- 二、“究恒常之宇宙,成一家之学说”
- 拨号、宽带接入“面面观”比较九种上网方式
- 向当前url添加参数
- 艾滋病ppt模板_ppt模板世界艾滋病日ppt模板,艾滋病的防治方法是什么
- 用SharpZipLib来压缩和解压文件 --zt
- python中dict函数_dict()函数以及Python中的示例
- CentOS7开发环境搭建(1)
- linux中exit和fatal区别,关于Linux系统命令中exit与exit的区别
- 50兆 svg 文件超过_如何让 Flutter 应用更好地使用 SVG?
- Oracle 11g EM删除重建的方法
- Swift - 设置应用程序图标的提醒个数(右上角小红圈)
- VS连接SQL ,Windows登录SQL 语句
- JS实现2048小游戏
- linux中下载python_linux下python安装
- 利用ZEBAR 软件生成ZPL 代码
- 许远东受邀上海管理科技论坛做《LTD数字化经营方法论》分享
- 数字基础设施可视化管理,任重而道远
- C#替换Word中的文本内容
热门文章
- TC358860XBG EDP/DP TO DAUL MIPI DSI
- 一个简单的点赞功能的实现
- linux-rootfs根文件系统构建
- Mysql:Got error 28 from storage engine
- 安装 Windows 7 VM虚拟机
- ARMv8 Linux内核head.S源码分析
- Pr 案例:制作快闪转场效果
- 2023年最新zabbix监控Linux服务+ensp交换机
- 内置计算机函数sgn,“sgn”是什么函数?
- python,使用微信远程控制电脑或使用微信定时发送消息关于QR.png报错的解决办法