Вот простая реализация алгоритма расстояния Левенштейна в Ruby:
def levenshtein(a, b)
case
when a.empty?: b.length
when b.empty?: a.length
else [(a[0] == b[0] ? 0 : 1) + levenshtein(a[1..-1], b[1..-1]),
1 + levenshtein(a[1..-1], b),
1 + levenshtein(a, b[1..-1])].min
end
end
Расстояние Левенштейна между двумя строками задается минимальным количеством операций, необходимых для преобразования одной строки в другую, где операция представляет собой вставку, удаление или замену одного символа.