Skip to content

Latest commit

 

History

History
81 lines (61 loc) · 4.41 KB

levenshtein.md

File metadata and controls

81 lines (61 loc) · 4.41 KB

Расстояние Левенштейна

Расстояние Левенштейна - это метрика, которая показывает разницу между двумя строками текста. Она определяется как минимальное число операций (удаление, вставка или замена символа), необходимое для преобразования одной строки в другую.

Чтобы сравнить два текста расстоянием Левенштейна в процентах, нужно сначала найти расстояние Левенштейна между ними, а затем поделить это расстояние на длину более длинной строки и умножить на 100. Это даст процентное соотношение разницы между строками.

Например, если у нас есть две строки "кот" и "собака", то расстояние Левенштейна между ними равно 3 (нужно вставить "с", "о" и "б" и удалить "т"), а длина более длинной строки (в этом случае "собака") равна 6. Таким образом, процентное соотношение равно 50.


Вот пример функции на JavaScript, которая сравнивает два текста расстоянием Левенштейна в процентах:

function levenshteinPercentage(text1, text2) {
  // Находим расстояние Левенштейна между текстами
  const distance = levenshteinDistance(text1, text2);

  // Определяем длину более длинной строки
  const maxLength = Math.max(text1.length, text2.length);

  // Вычисляем процентное соотношение разницы между строками
  const percentage = (distance / maxLength) * 100;

  return percentage;
}

Чтобы использовать эту функцию, нужно предварительно определить функцию levenshteinDistance, которая вычисляет расстояние Левенштейна между двумя строками. Вы можете найти множество реализаций этой функции в интернете.

Пример использования функции:

const text1 = "кот";
const text2 = "собака";

const percentage = levenshteinPercentage(text1, text2);
// percentage равно 50

Вот пример реализации функции для вычисления расстояния Левенштейна между двумя строками на JavaScript:

function levenshteinDistance(a, b) {
  // Создаем двумерный массив с размерами (a.length + 1) x (b.length + 1)
  const matrix = [];
  for (let i = 0; i <= a.length; i++) {
    matrix[i] = [];
    for (let j = 0; j <= b.length; j++) {
      matrix[i][j] = 0;
    }
  }

  // Заполняем первую строку и первый столбец нулями
  for (let i = 0; i <= a.length; i++) {
    matrix[i][0] = i;
  }
  for (let j = 0; j <= b.length; j++) {
    matrix[0][j] = j;
  }

  // Заполняем остальные ячейки массива
  for (let i = 1; i <= a.length; i++) {
    for (let j = 1; j <= b.length; j++) {
      // Вычисляем расстояние Левенштейна для текущей ячейки
      const cost = a[i - 1] === b[j - 1] ? 0 : 1;
      matrix[i][j] = Math.min(
        matrix[i - 1][j] + 1, // Удаление
        matrix[i][j - 1] + 1, // Вставка
        matrix[i - 1][j - 1] + cost // Замена
      );
    }
  }

  // Возвращаем расстояние Левенштейна
  return matrix[a.length][b.length];
}

Чтобы использовать эту функцию, вы можете вызвать ее, указав две строки, которые вы хотите сравнить