利用word分词来计算文本相似度
2015-05-24 15:12
465 查看
word分词提供了多种文本相似度计算方式:
方式一:余弦相似度,通过计算两个向量的夹角余弦值来评估他们的相似度
实现类:org.apdplat.word.analysis.CosineTextSimilarity
用法如下:
运行结果如下:
方式二:简单共有词,通过计算两篇文档有多少个相同的词来评估他们的相似度
实现类:org.apdplat.word.analysis.SimpleTextSimilarity
用法如下:
运行结果如下:
方式三:编辑距离,通过计算两个字串之间由一个转成另一个所需的最少编辑操作次数来评估他们的相似度
实现类:org.apdplat.word.analysis.EditDistanceTextSimilarity
用法如下:
运行结果如下:
方式四:SimHash + 汉明距离,先使用SimHash把不同长度的文本映射为等长文本,然后再计算等长文本的汉明距离
实现类:org.apdplat.word.analysis.SimHashPlusHammingDistanceTextSimilarity
用法如下:
运行结果如下:
方式五:Jaccard相似性系数,通过计算两个集合交集的大小除以并集的大小来评估他们的相似度
实现类:org.apdplat.word.analysis.JaccardTextSimilarity
用法如下:
运行结果如下:
方式六:欧几里得距离(Euclidean Distance),通过计算两点间的距离来评估他们的相似度
实现类:org.apdplat.word.analysis.EuclideanDistanceTextSimilarity
用法如下:
运行结果如下:
方式七:曼哈顿距离(Manhattan Distance),通过计算两个点在标准坐标系上的绝对轴距总和来评估他们的相似度
实现类:org.apdplat.word.analysis.ManhattanDistanceTextSimilarity
用法如下:
运行结果如下:
方式一:余弦相似度,通过计算两个向量的夹角余弦值来评估他们的相似度
实现类: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分词来计算文本相似度
- 利用余弦定理计算文本相似度
- 利用余弦定理计算文本的相似度
- 利用simhash计算文本相似度
- 【文本相似度】利用余弦相似性计算句子的相似度
- 利用余弦相似度来实现文本间的相似度计算
- 一个基于特征向量的近似网页去重算法——term用SVM人工提取训练,基于term的特征向量,倒排索引查询相似文档,同时利用cos计算相似度
- C#利用js脚本实现配置的文本表达式计算
- NLP点滴——文本相似度,计算文本间的距离
- simhash 文本相似度计算
- 文本相似度计算--余弦定理和广义Jaccard系数
- 计算文本相似度
- Python 文本挖掘:使用gensim进行文本相似度计算
- lucene计算文本相似度算法
- 举例说明利用《知网》计算词语相似度
- 利用Hownet进行语义相似度计算的类(
- 文本相似度计算之--- 编辑距离 && 最长公共子串
- simhash计算文本相似度
- 计算文本相似度