Как сделать приблизительное совпадение и заменить правильным словом в r?

list1 <- c("prmum","prum","primium","prm","prim","primum","prem","premum",
           "wrng","wng",
           "hug","hung",
           "amut",
           "chq","chquked","cheuq","chek","cheq",
           "cus","cust",
           "cbk","cb",
           "ringirng","rining","rigirigi")


list2 <- c("premium","wrong","hang","amount","cheque","customer","callback","ringing")
dat <- as.data.frame(list1)
for(i in length(list1)){
t <- agrep(list1[i],list2,value=FALSE)
 dat[t] <- list2[i]
}

У меня есть два списка: один с неправильными_словами, а другой - с правильными_словами. Я пытаюсь сделать следующее:

1) Возьмите первое слово. 2) Выполните приблизительное совпадение из списка правильных_слов и получите индексное местоположение. 3) Замените неправильное слово правильным словом в этом конкретном месте в фрейме данных или списке.

0
0
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Сделать это можно с помощью stringdistmatrix из пакета stringdist. Он использует расстояние Левенштейна, как и соглашается. Вы находите, какое слово имеет наиболее близкое соответствие, и заменяете его в исходном списке.

 library(stringdist)
 dist_mat <- stringdistmatrix(list1, list2)
 clean_list1 <- list2[apply(dist_mat, 1, which.min)]
 clean_list1

Теперь это решение может быть неуместным, если у вас очень длинные списки (предположим, что они имеют длину l1 и l2, вы получите матрицу размера l1 * l2). Возможно, вам придется пройти цикл, чтобы уменьшить потребление памяти.

clean_list1 <- list1
for (i in length(list1)){
     dist_vect <- stringdistmatrix(list1[i],list2)
     clean_list1 <- list2[which.min(dist_vect)]
}

Другие вопросы по теме