step_mutate con las listas de tokens de textrecipes.
Pregunta
Estoy haciendo procesamiento de lenguaje natural con el marco de trabajo tidymodels, aprovechando el paquete textrecipes, que tiene pasos de receta para el procesamiento de texto. Aquí, step_tokenize
toma un vector de caracteres como entrada y devuelve un objeto tokenlist
. Ahora, quiero realizar corrección ortográfica en la nueva variable tokenizada con una función personalizada para la ortografía correcta, utilizando funciones del paquete hunspell, pero obtengo el siguiente error (enlace a la publicación del blog sobre corrección ortográfica):
Error: Problema con la columna `desc` de `mutate()`.
i `desc = correct_spelling(desc)`.
x is.character(words) is not TRUE
Aparentemente, los tokenlists no se interpretan fácilmente como vectores de caracteres. He notado la existencia de step_untokenize
, pero simplemente disuelve el tokenlist pegando y colapsando y eso no es lo que necesito.
REPREX
library(tidyverse)
library(tidymodels)
library(textrecipes)
library(hunspell)
product_descriptions <- tibble(
desc = c("buen producto", "no muy bueno", "mala producto"),
price = c(1000, 700, 250)
)
correct_spelling <- function(input) {
output <- case_when(
# comprobar y (si es necesario) corregir la ortografía
!hunspell_check(input, dictionary('es_ES')) ~
hunspell_suggest(input, dictionary('es_ES')) %>%
# obtener la primera sugerencia, o NA si la lista de sugerencias está vacía
map(1, .default = NA) %>%
unlist(),
TRUE ~ input # si la palabra es correcta
)
# si la entrada está mal escrita pero no hay sugerencias, devolver la palabra de entrada
ifelse(is.na(output), input, output)
}
product_recipe <- recipe(desc ~ price, data = product_descriptions) %>%
step_tokenize(desc) %>%
step_mutate(desc = correct_spelling(desc))
product_recipe %>% prep()
LO QUE QUIERO, PERO SIN RECETAS
product_descriptions %>%
unnest_tokens(word, desc) %>%
mutate(word = correct_spelling(word))
davy.ai
%>%
agrupar_por(desc) %>%
resumir(desc = unir(palabra, separador = ‘ ‘))