17

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

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

我在这里问的是简单的事情还是需要我做一个巨大的刺激性功能来检查字符串?

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

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

4

6 回答 6

18

请参阅此问题和答案:获取最接近的字符串匹配

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

在此处输入图像描述

除此之外,您唯一的选择是一本与您正在寻找的相似的已接受单词的字典。

于 2012-04-09T14:02:59.073 回答
6

您可以使用Levenshtein distance

于 2012-04-09T14:02:43.753 回答
2

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

于 2012-04-09T14:10:06.597 回答
1

或许您需要的是一个包含相似词和常见拼写错误的大型字典,您可以使用它来将每个词“翻译”为一个条目或键。

这对于自定义单词很有用,因此您可以在与“strength”相同的键中添加“str”。

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

于 2012-04-09T14:02:49.687 回答
1

找了几个做文字到音素翻译的项目,不知道哪个最好

于 2012-04-09T14:03:02.470 回答
1

如果你想找到相似的词首,你可以使用词干分析器。词干将单词简化为一个共同的开头。最著名的算法是 Port Stemmer ( http://tartarus.org/~martin/PorterStemmer )。

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

于 2012-04-09T14:14:31.163 回答