检查String听起来像Java中的另一个

我想知道Java中是否有任何类能够使用自己的标准检查String与另一个相等的数量。 示例:

  • William Shakespeare / William Shakespeare : might be 100%
  • William Shakespe**a**re / William Shakespe**e**re : might have above 90%
  • William Shakespeare / Shakespeare, William : might have above 70% (just examples)

通常,有levenshtein算法, 它只输出你需要执行多少次插入/更新/删除操作(字符)以便将一个字符串转换为另一个字符串。 Apache的StringUtils类有一个实现。

我看到两个主要候选人:

  • Soundex编码,由Apache Commons实现。 但请注意,它主要用于单个相对较短的单词。 在第三个例子中找不到相似之处。 此外,它真的只适用于英语单词。
  • Levenshtein距离 (再次在Apache Commons实施)。 这与语言无关,但与第三个示例中的切换部分的相似性相对较低(更像是40%)。 像Damerau-Levenshtein距离这样的修改可能会产生更好的结果。

您必须使用“软”字符串指标:

  • 的SoundEx
  • 音位
  • 汉明距离
  • Levenshtein距离

还有许多其他内容,请参阅字符串度量标准以获取概述。

最好的算法高度依赖于问题领域。 例如,SoundEx会降低东欧名称,如果你想比较“真实世界”单词的相似性,汉明距离对你没什么帮助。

您可以使用: Class Soundex

这称为SoundEx,查找java soundex用于多个实现。

其中一个是apache soundex看起来不错(虽然我自己没有用过它)。

听起来像SoundEx , Apache Commons中提供了一个实现。

您可以尝试SoundEx算法。

尝试SimMetrics – 包括SoundEx和ChapmanMatchingSoundex的开源库,它可以为给出的示例提供更好的分数。 即Will Shake vs Shake,这种方法是否会在SoundEx上使用匹配方法。 您可能想要尝试的另一个指标,尽管不是语音得分非常好(如果在不同的名称匹配任务中不是更好),则是同一个库中的q-Grams指标。

字符串匹配非常特定于问题,因为大多数情况下,您将在字符串中具有相同的噪声特性,无论是额外的标点符号,拼写错误还是拼写错误。 如果要大规模地执行此操作,则需要找到适合输入数据中的问题的算法。

Soundex会给你一定程度的信心,两个字符串听起来相同,但你可能必须先做一些前期清理(比如删除标点符号并将字符串标记为单独的单词)。

你可以做的最好的事情是进行测试,你可以使用大量不同的算法,levenshtein是一个伟大的算法,soundex(尽管你的里程会因你的问题区域而变化)。 这两种算法BTW也有变化。

我建议看看simmetrics和第二个字符串库,它们有很多字符串匹配实现(我更喜欢第二个字符串库)。

听起来你有一个有趣的问题要解决,祝你好运!