diff --git a/README.md b/README.md index 8e0561b6..02acee24 100644 --- a/README.md +++ b/README.md @@ -590,7 +590,7 @@ word分词提供了多种文本相似度计算方式: String text1 = "我爱购物"; String text2 = "我爱读书"; String text3 = "他是黑客"; - Similarity textSimilarity = new EditDistanceTextSimilarity(); + TextSimilarity textSimilarity = new EditDistanceTextSimilarity(); double score1pk1 = textSimilarity.similarScore(text1, text1); double score1pk2 = textSimilarity.similarScore(text1, text2); double score1pk3 = textSimilarity.similarScore(text1, text3); @@ -613,6 +613,38 @@ word分词提供了多种文本相似度计算方式: 我爱读书 和 他是黑客 的相似度分值: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.86 + 我爱购物 和 他是黑客 的相似度分值:0.48 + 我爱读书 和 我爱读书 的相似度分值:1.0 + 我爱读书 和 他是黑客 的相似度分值:0.57 + 他是黑客 和 他是黑客 的相似度分值:1.0 + ###分词算法效果评估: 1、word分词 最大Ngram分值算法: