在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

Java计算文本相似度实现

2017-2-16 13:16| 发布者: zhangjf| 查看: 1173| 评论: 0

摘要: word分词提供了两种文本相似度计算方式: 方式一:余弦相似度,通过计算两个向量的夹角余弦值来评估他们的相似度 实现类:org.apdplat.word.analysis.CosineTextSimilarity 用法如下: String text1 = 我爱学习;S ...

word分词提供了两种文本相似度计算方式:

方式一:余弦相似度,通过计算两个向量的夹角余弦值来评估他们的相似度

实现类:org.apdplat.word.analysis.CosineTextSimilarity

用法如下:

  1. String text1 = "我爱学习";
  2. String text2 = "我爱读书";
  3. String text3 = "他是黑客";
  4. TextSimilarity textSimilarity = new CosineTextSimilarity();
  5. double score1pk1 = textSimilarity.similarScore(text1, text1);
  6. double score1pk2 = textSimilarity.similarScore(text1, text2);
  7. double score1pk3 = textSimilarity.similarScore(text1, text3);
  8. double score2pk2 = textSimilarity.similarScore(text2, text2);
  9. double score2pk3 = textSimilarity.similarScore(text2, text3);
  10. double score3pk3 = textSimilarity.similarScore(text3, text3);
  11. System.out.println(text1+" 和 "+text1+" 的相似度分值:"+score1pk1);
  12. System.out.println(text1+" 和 "+text2+" 的相似度分值:"+score1pk2);
  13. System.out.println(text1+" 和 "+text3+" 的相似度分值:"+score1pk3);
  14. System.out.println(text2+" 和 "+text2+" 的相似度分值:"+score2pk2);
  15. System.out.println(text2+" 和 "+text3+" 的相似度分值:"+score2pk3);
  16. System.out.println(text3+" 和 "+text3+" 的相似度分值:"+score3pk3);
复制代码

运行结果如下:

  1. 我爱学习 和 我爱学习 的相似度分值:1.0
  2. 我爱学习 和 我爱读书 的相似度分值:0.4
  3. 我爱学习 和 他是黑客 的相似度分值:0.0
  4. 我爱读书 和 我爱读书 的相似度分值:1.0
  5. 我爱读书 和 他是黑客 的相似度分值:0.0
  6. 他是黑客 和 他是黑客 的相似度分值:1.0
复制代码

方式二:简单共有词,通过计算两篇文档有多少个相同的词来评估他们的相似度

实现类:org.apdplat.word.analysis.SimpleTextSimilarity

用法如下:

  1. String text1 = "我爱学习";
  2. String text2 = "我爱读书";
  3. String text3 = "他是黑客";
  4. TextSimilarity textSimilarity = new SimpleTextSimilarity();
  5. double score1pk1 = textSimilarity.similarScore(text1, text1);
  6. double score1pk2 = textSimilarity.similarScore(text1, text2);
  7. double score1pk3 = textSimilarity.similarScore(text1, text3);
  8. double score2pk2 = textSimilarity.similarScore(text2, text2);
  9. double score2pk3 = textSimilarity.similarScore(text2, text3);
  10. double score3pk3 = textSimilarity.similarScore(text3, text3);
  11. System.out.println(text1+" 和 "+text1+" 的相似度分值:"+score1pk1);
  12. System.out.println(text1+" 和 "+text2+" 的相似度分值:"+score1pk2);
  13. System.out.println(text1+" 和 "+text3+" 的相似度分值:"+score1pk3);
  14. System.out.println(text2+" 和 "+text2+" 的相似度分值:"+score2pk2);
  15. System.out.println(text2+" 和 "+text3+" 的相似度分值:"+score2pk3);
  16. System.out.println(text3+" 和 "+text3+" 的相似度分值:"+score3pk3);
复制代码

运行结果如下:

  1. 我爱学习 和 我爱学习 的相似度分值:1.0
  2. 我爱学习 和 我爱读书 的相似度分值:0.5
  3. 我爱学习 和 他是黑客 的相似度分值:0.0
  4. 我爱读书 和 我爱读书 的相似度分值:1.0
  5. 我爱读书 和 他是黑客 的相似度分值:0.0
  6. 他是黑客 和 他是黑客 的相似度分值:1.0
复制代码

来自:http://my.oschina.net/apdplat/blog/417047

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-5-6 13:17

Copyright 2015-2025 djqfx

返回顶部