es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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))
Tags:  , , ,

Answer

Comments are closed.