Як розрахувати відстань левенштейна в r (з прикладами)


Відстань Левенштейна між двома рядками — це мінімальна кількість змін одного символу, необхідних для перетворення одного слова в інше.

Слово «модифікації» включає заміни, вставки та видалення.

Наприклад, припустимо, що ми маємо такі два слова:

  • НА ВЕЧІРКУ
  • ПАРК

Відстань Левенштейна між двома словами (тобто кількість змін, які нам потрібно зробити, щоб перетворити одне слово в інше) буде 2 :

Приклад відстані Левенштейна

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

У цьому посібнику пояснюється, як обчислити відстань Левенштейна між рядками в R за допомогою функції stringdist() пакета stringdist у R.

Ця функція використовує такий базовий синтаксис:

 #load stringdist package
library(stringdist)

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

Зауважте, що ця функція може обчислювати багато різних вимірювань відстані. Вказавши метод = “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)

#definevectors
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

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

Додаткові ресурси

Як обчислити відстань Хеммінга в R
Як обчислити евклідову відстань у R
Як розрахувати відстань від Манхеттена в R

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *