Как использовать пакет hunspell, чтобы предлагать правильные слова в столбце в R? - PullRequest
1 голос
/ 07 мая 2019

В настоящее время я работаю с большим фреймом данных, содержащим много текста в каждой строке, и хотел бы эффективно идентифицировать и заменить слова с ошибками в каждом предложении пакетом hunspell. Я смог определить слова с ошибками, но не могу понять, как сделать hunspell_suggest в списке.

Вот пример фрейма данных:

df1 <- data.frame("Index" = 1:7, "Text" = c("A complec sentence joins an independet",
                                            "Mary and Samantha arived at the bus staton before noon",
                                            "I did not see thm at the station in the mrning",
                                            "The participnts read 60 sentences in radom order",
                                            "how to fix mispelled words in R languge",
                                            "today is Tuesday",
                                            "bing sports quiz"))

Я преобразовал текстовый столбец в символ и использовал hunspell для определения слов с ошибками в каждой строке.

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

Я пытался

df1$suggest <- hunspell_suggest(df1$word_check)

но он продолжает выдавать эту ошибку:

Error in hunspell_suggest(df1$word_check) : 
  is.character(words) is not TRUE

Я новичок в этом, поэтому я не совсем уверен, как получится столбец подсказок, использующий функцию hunspell_suggest. Любая помощь будет принята с благодарностью.

1 Ответ

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

Проверьте ваши промежуточные шаги. Вывод df1$word_check выглядит следующим образом:

List of 5
 $ : chr [1:2] "complec" "independet"
 $ : chr [1:2] "arived" "staton"
 $ : chr [1:2] "thm" "mrning"
 $ : chr [1:2] "participnts" "radom"
 $ : chr [1:2] "mispelled" "languge"

типа list. Если вы сделали lapply(df1$word_check, hunspell_suggest), вы можете получить предложения.

EDIT

Я решил более подробно остановиться на этом вопросе, поскольку я не видел какой-либо легкой альтернативы. Вот что я придумала:

cleantext = function(x){

  sapply(1:length(x),function(y){
    bad = hunspell(x[y])[[1]]
    good = unlist(lapply(hunspell_suggest(bad),`[[`,1))

    if (length(bad)){
      for (i in 1:length(bad)){
        x[y] <<- gsub(bad[i],good[i],x[y])
      }}})
  x
}

Хотя, возможно, существует более элегантный способ сделать это, эта функция возвращает вектор строк символов, исправленный следующим образом:

> df1$Text
[1] "A complec sentence joins an independet"                
[2] "Mary and Samantha arived at the bus staton before noon"
[3] "I did not see thm at the station in the mrning"        
[4] "The participnts read 60 sentences in radom order"      
[5] "how to fix mispelled words in R languge"               
[6] "today is Tuesday"                                      
[7] "bing sports quiz" 

> cleantext(df1$Text)
[1] "A complex sentence joins an independent"               
[2] "Mary and Samantha rived at the bus station before noon"
[3] "I did not see them at the station in the morning"      
[4] "The participants read 60 sentences in radon order"     
[5] "how to fix misspelled words in R language"             
[6] "today is Tuesday"                                      
[7] "bung sports quiz" 

Остерегайтесь, так как это возвращает первое предложение, данное hunspell - которое может быть или не быть правильным.

...