如何检查两个字符串是否大致相等?

时间:2012-04-09 13:57:44

标签: java string

我正在为一个游戏做一个聊天响应者,我想知道是否有一种方法可以比较两个字符串,看看它们是否近似相等,例如:

如果有人打字:     “力量水平?” 它会做一个功能.. 那么如果其他人打字:     “Str等级?” 它会做同样的功能,但我想要它,以便如果有人发错字或类似的东西,它会自动检测他们试图输入的内容,例如:     “力量水平?” 也会让函数被调用。

我在这里问的是一些简单的东西,还是需要我制作一个巨大的刺激性功能来检查字符串?

如果你对我的解释感到困惑(不是我的强项之一)那么这基本上就是我所要求的。

如何检查两个字符串是否彼此相似?

6 个答案:

答案 0 :(得分:18)

请参阅此问题和答案:Getting the closest string match

使用一些启发式算法和Levenshtein distance算法,您可以计算两个字符串的相似性,并猜测它们是否相等。

enter image description here

除此之外,您唯一的选择是与您正在寻找的词语类似的词典。

答案 1 :(得分:6)

您可以使用Levenshtein distance

答案 2 :(得分:2)

我相信您应该使用Edit distance algorithms中的一个来解决您的问题。这是例如java中的Levenstein distance算法实现。您可以使用它来比较句子中的单词,如果他们的编辑距离之和小于例如句子长度的10%,则认为它们等于。

答案 3 :(得分:1)

也许您需要的是一本用于相似单词和常见拼写错误的大型词典,您可以将其用于每个单词“翻译”为单个条目或键。

这对自定义单词很有用,所以你可以在“强度”的同一个键中添加“str”。

但是,您也可以制作一些自动方法,即在字典中找不到您的单词时,递归循环1个字母的差异(丢失或替换)并且可以递归到更深层次,即2个丢失的字母等

答案 4 :(得分:1)

答案 5 :(得分:1)

如果你想找到类似的单词开头,可以使用词干分析器。 Stemmers将单词缩减为共同的开端。最常见的算法,如果Port Stemmer(http://tartarus.org/~martin/PorterStemmer)。

如上所述,Levenshtein非常棒,但对于大于一或两的距离,计算量很大。