我正在为一个游戏做一个聊天响应者,我想知道是否有一种方法可以比较两个字符串,看看它们是否近似相等,例如:
如果有人打字: “力量水平?” 它会做一个功能.. 那么如果其他人打字: “Str等级?” 它会做同样的功能,但我想要它,以便如果有人发错字或类似的东西,它会自动检测他们试图输入的内容,例如: “力量水平?” 也会让函数被调用。
我在这里问的是一些简单的东西,还是需要我制作一个巨大的刺激性功能来检查字符串?
如果你对我的解释感到困惑(不是我的强项之一)那么这基本上就是我所要求的。
如何检查两个字符串是否彼此相似?
答案 0 :(得分:18)
请参阅此问题和答案:Getting the closest string match
使用一些启发式算法和Levenshtein distance算法,您可以计算两个字符串的相似性,并猜测它们是否相等。
除此之外,您唯一的选择是与您正在寻找的词语类似的词典。
答案 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非常棒,但对于大于一或两的距离,计算量很大。