Как рассчитать расстояние Левенштейна в R (с примерами)

Как рассчитать расстояние Левенштейна в R (с примерами)

Расстояние Левенштейна между двумя строками — это минимальное количество односимвольных правок, необходимых для превращения одного слова в другое.

Слово «редактирование» включает замены, вставки и удаления.

Например, предположим, что у нас есть следующие два слова:

  • ПАРТИЯ
  • ПАРК

Расстояние Левенштейна между двумя словами (то есть количество правок, которые мы должны сделать, чтобы превратить одно слово в другое) будет равно 2 :

Пример расстояния Левенштейна

На практике расстояние Левенштейна используется во многих различных приложениях, включая приблизительное сопоставление строк, проверку орфографии и обработку естественного языка.

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

Эта функция использует следующий базовый синтаксис:

#load stringdist package
library(stringdist)

#calculate Levenshtein distance between two strings
stringdist(" string1", " string2", method = " lv ")

Обратите внимание, что эта функция может вычислять множество различных показателей расстояния. Указав method = «lv», мы сообщаем функции вычислить расстояние Левенштейна.

Пример 1. Расстояние Левенштейна между двумя строками

В следующем коде показано, как вычислить расстояние Левенштейна между двумя строками «party» и «park» с помощью функции stringdist() :

#load stringdist package
library(stringdist)

#calculate Levenshtein distance between two strings
stringdist('party', 'park', method = 'lv')

[1] 2

Расстояние Левенштейна оказывается равным 2 .

Пример 2. Расстояние Левенштейна между двумя векторами

Следующий код показывает, как вычислить расстояние Левенштейна между каждой парной комбинацией строк в двух разных векторах:

#load stringdist package
library(stringdist)

#define vectors
a <- c('Mavs', 'Spurs', 'Lakers', 'Cavs')
b <- c('Rockets', 'Pacers', 'Warriors', 'Celtics')

#calculate Levenshtein distance between two vectors
stringdist(a, b, method='lv')

[1] 6 4 5 5

Способ интерпретации вывода следующий:

  • Расстояние Левенштейна между «Мавс» и «Рокетс» равно 6 .
  • Расстояние Левенштейна между «Тоттенхэмом» и «Пэйсерс» равно 4 .
  • Расстояние Левенштейна между «Лейкерс» и «Уорриорз» равно 5 .
  • Расстояние Левенштейна между «Кавс» и «Селтикс» равно 5 .

Пример 3. Расстояние Левенштейна между столбцами фрейма данных

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

#load stringdist package
library(stringdist)

#define data
data <- data.frame(a = c('Mavs', 'Spurs', 'Lakers', 'Cavs'),
 b = c('Rockets', 'Pacers', 'Warriors', 'Celtics'))

#calculate Levenshtein distance
stringdist(data$a, data$b, method='lv')

[1] 6 4 5 5

Затем мы могли бы добавить расстояние Левенштейна в качестве нового столбца во фрейме данных, если захотим:

#save Levenshtein distance as vector
lev <- stringdist(data$a, data$b, method='lv')

#append Levenshtein distance as new column 
data$lev <- lev

#view data frame
data

 a b lev
1 Mavs Rockets 6
2 Spurs Pacers 4
3 Lakers Warriors 5
4 Cavs Celtics 5

Дополнительные ресурсы

Как рассчитать расстояние Хэмминга в R
Как рассчитать евклидово расстояние в R
Как рассчитать манхэттенское расстояние в R

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.