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.

Coincidencia de tokens de texto con una lista de palabras.

Me gustaría comparar palabras de una lista de palabras con texto y extraerlas en una nueva columna.

Tengo estos datos:

df <- structure(list(ID = 1:3, Text = c(list("red car, car going, going to"), list("red ball, ball on, on street"), list("to be, be or, or not"))), class = "data.frame", row.names = c(NA, -3L))


  ID                         Text
1  1 red car, car going, going to
2  2 red ball, ball on, on street
3  3         to be, be or, or not

Y tengo esta lista de palabras importantes:

words <- c("car", "ball", "street", "dog", "frog")

Me gustaría tener df así:

ID                         Text  Word
1  1 red car, car going, going to  c("car","car")
2  2 red ball, ball on, on street  c("ball", "ball", "street")
3  3         to be, be or, or not  NA

Mi intento:

df$Word <- lapply(df$Text, function(x) stringr::str_extract_all(x, "\\b%s+%words+%\\b"))

Pero me da una lista de longitud 5 no solo las palabras de Text.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para emparejar las palabras de la lista “words” con la columna Text del marco de datos y extraerlas en una nueva columna “Word”, puede modificar su código utilizando las funciones str_extract_all y str_c de la siguiente manera:

    “`{r}
    df$Word <- lapply(df$Text, function(x) {
    str_extract_all(x, paste0(“\b(“, paste(words, collapse = “|”), “)\b”))
    })
    df$Word <- sapply(df$Word, function(x) {
    if(length(x) == 0) {
    NA
    } else {
    str_c(x, collapse = “,”)
    }
    })


    Aquí, la función `str_extract_all` empareja todas las palabras en la columna Text que están presentes en el vector "words" utilizando el patrón de expresión regular `\\b(words)\\b`, donde `\\b` representa el límite de palabra y `|` representa OR. Las palabras resultantes luego se combinan usando la función `str_c` y se almacenan en la columna "Word". Si no se encuentra ninguna palabra en la columna Text, la función devuelve `NA`. El marco de datos resultante sería:

    ID Text Word
    1 1 red car, car going, going to car,car
    2 2 red ball, ball on, on street ball,ball,street
    3 3 to be, be or, or not
    “`

Comments are closed.