Use grepl para buscar cualquiera de las múltiples subcadenas en un texto

Estoy usando grepl () en R para buscar si existe alguno de los siguientes géneros en mi texto. Lo estoy haciendo así en este momento:

grepl("Action", my_text) | grepl("Adventure", my_text) | grepl("Animation", my_text) | grepl("Biography", my_text) | grepl("Comedy", my_text) | grepl("Crime", my_text) | grepl("Documentary", my_text) | grepl("Dtwig", my_text) | grepl("Family", my_text) | grepl("Fantasy", my_text) | grepl("Film-Noir", my_text) | grepl("History", my_text) | grepl("Horror", my_text) | grepl("Music", my_text) | grepl("Musical", my_text) | grepl("Mystery", my_text) | grepl("Romance", my_text) | grepl("Sci-Fi", my_text) | grepl("Sport", my_text) | grepl("Thriller", my_text) | grepl("War", my_text) | grepl("Western", my_text) 

¿Hay una mejor manera de escribir este código? ¿Puedo poner todos los géneros en una matriz y de alguna manera usar grepl() en eso?

Puedes pegar los géneros junto con un “o” | separador y ejecuta eso a través de grepl como una sola expresión regular.

 x <- c("Action", "Adventure", "Animation", ...) grepl(paste(x, collapse = "|"), my_text) 

Aquí hay un ejemplo.

 x <- c("Action", "Adventure", "Animation") my_text <- c("This one has Animation.", "This has none.", "Here is Adventure.") grepl(paste(x, collapse = "|"), my_text) # [1] TRUE FALSE TRUE 

Puede recorrer una lista o un vector de géneros, como se muestra a continuación:

 genres <- c("Action",...,"Western") sapply(genres, function(x) grepl(x, my_text)) 

Para responder a su pregunta, si solo quiere saber si any elemento del resultado es VERDADERO, puede usar la función any() .

 any(sapply(genres, function(x) grepl(x, my_text))) 

Simplemente, si cualquier elemento de es VERDADERO, any devolverá VERDADERO.

Intereting Posts