java学到哪才可以检测两个文本的相似度?

Python019

java学到哪才可以检测两个文本的相似度?,第1张

学到IO流可以比较文本了, 不过用IO比较文本比较麻烦, 而且效率低

如果要效率高的话, 就需要学

linux + thread + progress

这样子可以通过java调用linux命令

linux中有一个comm -12命令来实现比较两个文件的共同数据, 生成一个新文本。 拿到新文本的大小/旧文本的大小, 旧可以粗略计算出相似度, 而且效率极其高

如果文本有上百万行数据的话, 用IO可能要十几个小时才有结果, 但是linux命令只需要1分钟左右就可以出结果

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.4

我爱学习 和 他是黑客 的相似度分值: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

最简单的、最节省性能的方法是建立字典。 字典的索引就是字本身,遍历字符串,没遇到一个字就加入到字典中,加入的时候判断下,如果索引存在则加1,不存在则创建,然后在取字典最大值,大于6就报错。 上面说的字典可以用java中的hashMap实现。