Как использовать lapply на str_replace_all и hunspell_suggest, чтобы заменить все слова с ошибками? - PullRequest
2 голосов
/ 08 мая 2019

Я пытаюсь выяснить, как объединить str_replace_all и hunspell_suggest вместе в одном случае. Вот моя текущая ситуация:

У меня есть фрейм данных, который выглядит следующим образом:

library(hunspell)
df1 <- data.frame("Index" = 1:7, "Text" = c("Brad came to dinner with us tonigh.",
                                            "Wuld you like to trave with me?",
                                            "There is so muh to undestand.",
                                            "Sentences cone in many shaes and sizes.",
                                            "Learnin R is fun",
                                            "yesterday was Friday",
                                            "bing search engine"))

Вот мои коды для определения слов, которые введены в столбец неправильно:

df1$Text <- as.character(df1$Text)
df1$word_check <- hunspell(df1$Text)

Однако я застрял, когда дело доходит до замены слов с ошибками, используя первые предложения из hunspell_suggest

Я попробовал этот следующий код, но он может делать только 1 строку и только со строками, в которых есть 1 слово с ошибкой, например:

df1$replace <- str_replace_all(df1$Text, df1$word_check[[1]], hunspell_suggest(df1$word_check[[1]])[[1]][1])

Я не уверен, как включить lapply в код выше, чтобы эффективно заменить все слова с ошибками первым предложением, основанным на hunspell_suggest, и оставить эти правильные слова в покое.

Спасибо.

Ответы [ 2 ]

1 голос
/ 08 мая 2019

Позвольте мне оставить другой вариант для вас, хотя этот случай уже решен. Вы пытались использовать str_replace_all(). Я использовал stri_replace_all_fixed() вместо этого. Первым шагом является выявление плохих слов и сохранение их в badwords. Второй шаг - извлечь первое предложение для каждого слова, используя hunspell_suggest() в sapply() и сохранить их в suggestions. Наконец, я использую эти два вектора в stri_replace_all_fixed().

library(dplyr)
library(stringi)
library(hunspell)

df1 <- data.frame("Index" = 1:7, "Text" = c("Brad came to dinner with us tonigh.",
                                            "Wuld you like to trave with me?",
                                            "There is so muh to undestand.",
                                            "Sentences cone in many shaes and sizes.",
                                            "Learnin R is fun",
                                            "yesterday was Friday",
                                            "bing search engine"),
                  stringsAsFactors = FALSE)

# Get bad words.
badwords <- hunspell(df1$Text) %>% unlist

# Extract the first suggestion for each bad word.
suggestions <- sapply(hunspell_suggest(badwords), "[[", 1)

mutate(df1, Text = stri_replace_all_fixed(str = Text,
                                          pattern = badwords,
                                          replacement = suggestions,
                                          vectorize_all = FALSE)) -> out

#  Index                                   Text
#1     1   Brad came to dinner with us tonight.
#2     2        Wald you like to trace with me?
#3     3         There is so hum to understand.
#4     4 Sentences cone in many shes and sizes.
#5     5                      Learning R is fun
#6     6                   yesterday was Friday
#7     7                     bung search engine
1 голос
/ 08 мая 2019

вот одно решение с использованием пакета DataCombine:

library(DataCombine)

# vector of words to replace
wrong <- unlist(hunspell(df1$Text))
# vector of the first suggested words
correct <- sapply(wrong, function(x) hunspell_suggest(x)[[1]][1])

Replaces <- data.frame(from = wrong, to = correct)

FindReplace(data = df1, Var = "Text", replaceData = Replaces,
                       from = "from", to = "to", exact = FALSE)

#Index                                   Text
#1     1   Brad came to dinner with us tonight.
#2     2        Wald you like to trace with me?
#3     3         There is so hum to understand.
#4     4 Sentences cone in many shes and sizes.
#5     5                      Learning R is fun
#6     6                   yesterday was Friday
#7     7                     bung search engine
...