如何检查两个字符串是否近似相等?

17

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

如果有人输入: “力量级别?” 它将执行一个函数... 然后如果有人键入: “Str级别?” 它将执行相同的功能,但我希望它可以自动检测到他们尝试键入的内容,例如: “Strength tlevel?” 也会调用该函数。

我所问的是简单的问题还是需要编写一个庞大而繁琐的函数来检查字符串?

如果您被我的解释搞糊涂了(这并不是我的强点),那么这就是我所问的问题。

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


1
看起来你需要将字符串转换为音素以进行这种类型的比较。 - Olivier Refalo
听起来是个不错的主意! - Shaun Wild
是的,好主意,不过"str"听起来并不像"strength" - 所以你应该确切地表达你的期望。 - Olivier Refalo
6个回答

18

请查看这个问题和答案:获取最接近的字符串匹配

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

输入图像描述

除此之外,你唯一的选择就是一个包含所需单词的词典,类似于你正在寻找的那个词。


6

我在我的答案中正好在寻找那个,但是想不起来名字了,很好的发现。 - ericosg

2

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


1
也许你需要一个大型词典来处理相似单词和常见拼写错误,你可以为每个单词使用一个单一的条目或关键字进行“翻译”。
这对于自定义单词非常有用,因此您可以将“str”添加到与“strength”相同的关键字中。
但是,您还可以制作一些自动化方法,例如当字典中找不到您的单词时,递归循环查找1个字母差异(缺失或替换),并且可以递归到更深层次,例如2个缺失字母等。

1

1

如果你想要找相似词的开头,你可以使用词干提取器。词干提取器会将单词缩减到一个共同的起始部分。最常见的算法是Porter词干提取器(http://tartarus.org/~martin/PorterStemmer)。

如前所述,Levenshtein距离很好用,但在距离大于一或两个时计算负担较重。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接