这些天我用Google搜索,但没有任何帮助。 我现在不确定它是否可能,所以我想我只是在stackoverflow。
情况: 用户可以输入单词或输入框。当他完成一个函数检查单词是否在单词数组中时 - 很容易。现在我想写一个帮助,如果一个字母丢失或者字母写错了方法,就会弹出一条消息。
搜索的关键是什么? 我试过了:
我希望你能够理解我的意思,并能给我一些提示。
答案 0 :(得分:6)
Levenshtein距离是计算相似单词之间距离的度量。对于每个改变,改组或丢失的字母,距离增加。你可以在这里阅读更多: http://en.wikipedia.org/wiki/Levenshtein_distance
并在此处参考不同语言的实施:http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance
我希望有帮助并感谢评论投票;)
答案 1 :(得分:1)
请参阅here以获取检查单词之间相似性的算法。
使用此处的代码,您可以使用array.any?{|e| e.similar?(user_input)}
您可以根据需要调整阈值。 当然,这是Ruby,所以你必须翻译成javascript ...
我从那里复制了代码:
class String
def levenstein(other, ins=2, del=1, sub=1)
return nil if self.nil? || other.nil?
dm = []
dm[0] = (0..self.length).collect { |i| i * ins}
fill = [0] * (self.length - 1)
for i in 1..other.length
dm[i] = [i * del, fill.flatten]
end
for i in 1..other.length
for j in 1..self.length
dm[i][j] = [
dm[i-1][j-1] + (self[i-1] == other[i-1] ? 0 : sub),
dm[i][j-1] + ins,
dm[i-1][j] + del
].min
end
end
dm[other.length][self.length]
end
def similar?(other, thresh = 2)
self.levenstein(other) < thresh
end
end
# Tryout
"Foobar".similar?("Fuubar", 3) # => true