检查一个字符串在Java中听起来有多像另一个字符串

2022-09-03 04:23:06

我想知道Java中是否有任何类能够使用自己的标准检查字符串与另一个字符串的相等程度。例:

  • 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)

答案 1

我看到两个主要候选人:

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

答案 2

通常,有levenshtein算法,它只输出您必须执行多少个插入/更新/删除操作(按字符)才能将一个字符串转换为另一个字符串。Apache的StringUtils类有一个实现。