Формула расстояния Левенштейна в CoffeeScript?

Я пытаюсь создать или найти в CoffeeScript реализацию формулы расстояния Левенштейна, также известной как Edit Distance. Вот что у меня есть на данный момент, любая помощь будет очень признательна.

levenshtein = (s1,s2) ->
    n = s1.length
    m = s2.length
    if n < m
        return levenshtein(s2, s1) 
    if not s1 
        return s2.length
    previous_row = [s2.length + 1]
    for c1, i in s1
        current_row = [i + 1]
        for c2, j in s2
            insertions = previous_row[j + 1] + 1
            deletions = current_row[j] + 1
            substitutions = previous_row[j] # is this unnescessary?-> (c1 != c2)
            current_row.push(Math.min(insertions,deletions,substitutions))
        previous_row = current_row
    return previous_row[previous_row.length-1]
#End Levenshetein Function

Кстати: я знаю, что этот код неправильный на многих уровнях, я рад любой и всяческой конструктивной критике. Просто хочу улучшить и выяснить эту формулу!

CodeEdit1: Исправлены ошибки, на которые указал Тревор, текущий код выше включает эти изменения

Обновление: Я задаю вопрос - как нам сделать Левенштейна в CoffeeScript?

Вот «шаги» алгоритма расстояния Левенштейна, которые помогут вам понять, чего я пытаюсь достичь.

Шаги 1
Установите n равным длине s. Задайте m равной длине t. Если n = 0, вернуть m и выйти. Если m = 0, вернуть n и выйти. Постройте матрицу, содержащую 0..m строк и 0..n столбцов.

2
Инициализируйте первую строку как 0..n. Инициализируйте первый столбец как 0..m.

3 Изучите каждый символ s (i от 1 до n).

4 Изучите каждый символ t (j от 1 до m).

5 Если s [i] равно t [j], стоимость равна 0. Если s [i] не равно t [j], стоимость равна 1.

6 Установите ячейку d [i, j] матрицы равной минимуму: а. Ячейка непосредственно выше плюс 1: d [i-1, j] + 1. б. Клетка слева плюс 1: d [i, j-1] + 1. c. Ячейка по диагонали вверху и слева плюс стоимость: d [i-1, j-1] + стоимость.

7 После завершения шагов итерации (3, 4, 5, 6) расстояние находится в ячейка d [n, m].

источник: http: //www.merriampark.com/ld.htm

8
задан joe norton 10 July 2011 в 00:36
поделиться