我正在编写一个java软件,必须对以UTF-8编码的两个文档的相似性做出最终判断。
这两个文件很可能是相同的,或者彼此略有不同,因为它们有许多共同的特征,如日期,位置,创建者等,但是它们的文本决定了它们是否确实存在。< / p>
我希望两个文档的文本非常相似或者根本不相似,所以我可以对设置相似性的阈值进行相当严格的规定。例如,我可以说这两个文件只有在他们有90%的共同词时才相似,但我希望有一些更强大的东西,这对短文和长篇文章都适用。
总结一下,我有:
我已经尝试了simmetrics,它有大量的字符串匹配功能,但我最感兴趣的是建议使用可能的算法。
我可能的候选人是:
同样考虑两个文本只有在完全相同的情况下相似才会有效,因为我希望只有几个单词的文档才能通过相似性测试。
答案 0 :(得分:3)
Levenshtein适合两个单词之间的编辑距离;如果您正在比较文档,像diff这样的东西可能会更符合您的需求。
我会从这里开始:http://c2.com/cgi/wiki?DiffAlgorithm。它们提供了许多可以查看的差异式算法的链接。
答案 1 :(得分:2)
Levenshtein距离用于比较两个单词。在它的文档中,流行的方式是余弦相似或潜在语义分析。
答案 2 :(得分:1)
Levenshtein距离是一个标准尺度的原因:它易于计算并且易于掌握其含义。如果您对长文档中的字符数保持警惕,则可以在单词或句子甚至段落而不是字符上计算它。由于您希望类似的对非常相似,所以它仍然可以正常工作。
答案 3 :(得分:1)
Levenshtein似乎是最好的解决方案。如果你试图获得一个加权的相似性排名 - 我想是因为你提到Levenshten的输出对于较短的文本更重要 - 然后只需用levenshtein算法的结果除以文档。