我知道SOUNDEX和(双)Metaphone,但这些不让我测试整个单词的相似性 - 例如"Hi"听起来非常类似于"Bye",但这两种方法都会标记它们完全不同.
Ruby中是否有任何库或您知道的任何方法能够确定两个单词之间的相似性?(布尔值是/不相似,或数字40%相似)
编辑:如果有一种简单的方法可以"插入"不同的方言或语言,可以获得额外奖励积分!
我想你在描述levenshtein的距离.是的,有宝石.如果你是纯Ruby,请去文本gem.
$ gem install text
Run Code Online (Sandbox Code Playgroud)
文档有更多细节,但这里有它的关键:
Text::Levenshtein.distance('test', 'test') # => 0
Text::Levenshtein.distance('test', 'tent') # => 1
Run Code Online (Sandbox Code Playgroud)
如果你对本机扩展没问题......
$ gem install levenshtein
Run Code Online (Sandbox Code Playgroud)
它的用法类似.它的表现非常好.(它在我的系统上每分钟处理大约1000次拼写纠正.)
如果您需要知道两个单词的相似程度,请使用距离超过单词长度.
如果你想要一个简单的相似性测试,考虑这样的事情:
未经测试,但直截了当:
String.module_eval do
def similar?(other, threshold=2)
distance = Text::Levenshtein.distance(self, other)
distance <= threshold
end
end
Run Code Online (Sandbox Code Playgroud)