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.
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
ystr_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 = “,”)
}
})
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
“`