Я думаю, вы описываете расстояние Левенштейна. И да, для этого есть драгоценные камни. Если вы любите чистый Ruby, найдите текстовый камень.
$ gem install text
В документах есть больше деталей, но вот суть этого:
Text::Levenshtein.distance('test', 'test') # => 0
Text::Levenshtein.distance('test', 'tent') # => 1
Если вы в порядке с собственными расширениями ...
$ gem install levenshtein
Используется аналогично . Это производительность очень хорошая. (Он обрабатывает ~ 1000 исправлений правописания в минуту в моих системах.)
Если вам нужно узнать, насколько похожи два слова, используйте расстояние по длине слова.
Если вы хотите простой тест на сходство, рассмотрите что-то вроде этого:
Не проверено, но прямо:
String.module_eval do
def similar?(other, threshold=2)
distance = Text::Levenshtein.distance(self, other)
distance <= threshold
end
end