Tengo código R para extraer información de un documento. ¿Cómo puedo hacer un bucle para todos los documentos en mi carpeta?
Tengo una carpeta de archivos de texto y quiero extraer textos específicos de ellos y organizarlos en columnas separadas en un nuevo marco de datos. Hice el código para un archivo, pero no puedo editarlo para que funcione en un bucle que se ejecute en todos los documentos de mi carpeta.
Este es mi código para un archivo de texto:
clean_text <- as.data.frame(strsplit(text$text, '*'), col.names = "text") %>%
mutate(text = str_replace_all(text, "\n", " "),
text = str_replace_all(text, "- ", ""),
text = str_replace_all(text,"^\s", "")) %>%
filter(!text == " ") %>%
mutate(paragraphs = ifelse(grepl("^[[:digit:]]", text) == T, text, NA)) %>%
rename(category = text) %>%
mutate(category = ifelse(grepl("^[[:digit:]]", category) == T, NA, category)) %>%
fill(category) %>%
filter(!is.na(paragraphs)) %>%
mutate(paragraphs = strsplit(paragraphs, '^[[:digit:]]{1,3}\.|\\t\\s[[:digit:]]{1,3}\.')) %>%
unnest(paragraphs) %>%
mutate(paragraphs = strsplit(paragraphs, 'Download as PDF')) %>%
unnest(paragraphs) %>%
mutate(paragraphs = str_replace_all(paragraphs, "\t", "")) %>%
mutate(paragraphs = ifelse(grepl("javascript", paragraphs), "", paragraphs)) %>%
mutate(paragraphs = str_replace_all(paragraphs, "^\\s+", "")) %>%
filter(!paragraphs == "")
¿Cómo puedo convertir esto en un bucle? Me doy cuenta de que hay preguntas similares, pero ninguna de las soluciones ha funcionado para mí. ¡Gracias de antemano por la ayuda!
davy.ai
Para convertir esto en un bucle que se ejecute en todos los documentos de tu carpeta, puedes usar la función
list.files()
para obtener una lista de todos los archivos de tu carpeta y luego recorrerlos usando un buclefor
. Aquí tienes un ejemplo de código:“`{r}
establecer el directorio de trabajo en tu carpeta
setwd(“ruta/a/tu/carpeta”)
obtener una lista de todos los archivos txt de tu carpeta
file_list <- list.files(pattern = “\.txt$”)
crear un data frame vacío para almacenar los resultados
result_df <- data.frame()
recorrer cada archivo y extraer el texto especifico
for (file in file_list) {
text <- readLines(file) clean_text <- as.data.frame(strsplit(text, '*'), col.names = "text") %>%
mutate(text = str_replace_all(text, “\n”, ” “),
text = str_replace_all(text, “- “, “”),
text = str_replace_all(text, “^\s”, “”)) %>%
filter(!text == ” “) %>%
mutate(paragraphs = ifelse(grepl(“^[[:digit:]]”, text) == T, text, NA)) %>%
rename(category = text) %>%
mutate(category = ifelse(grepl(“^[[:digit:]]”, category) == T, NA, category)) %>%
fill(category) %>%
filter(!is.na(paragraphs)) %>%
mutate(paragraphs = strsplit(paragraphs, “^[[:digit:]]{1,3}\.|\t\s[[:digit:]]{1,3}\.”)) %>%
unnest(paragraphs) %>%
mutate(paragraphs = strsplit(paragraphs, “Download as PDF”)) %>%
unnest(paragraphs) %>%
mutate(paragraphs = str_replace_all(paragraphs, “\t”, “”)) %>%
mutate(paragraphs = ifelse(grepl(“javascript”, paragraphs), “”, paragraphs)) %>%
mutate(paragraphs = str_replace_all(paragraphs, “^\s+”, “”)) %>%
filter(!paragraphs == “”)
# agregar los resultados al data frame de resultados
result_df <- bind_rows(result_df, clean_text)
}
ver el data frame de resultados final
result_df
“`
En este código, primero establecemos el directorio de trabajo en la carpeta que contiene tus archivos txt. Luego utilizamos la función
list.files()
para obtener una lista de todos los archivos en tu carpeta que terminan con .txt. Creamos un data frame vacío (result_df
) para almacenar los resultados de cada archivo. Luego usamos un buclefor
para recorrer cada archivo y extraer el texto específico utilizando el código que proporcionaste en la pregunta. Luego utilizamos la funciónbind_rows()
del paquetedplyr
para agregar los resultados de cada archivo alresult_df
. Finalmente, visualizamos elresult_df
final.Ten en cuenta que es posible que debas ajustar el código si tus archivos txt tienen un formato diferente o si el texto específico que deseas extraer es diferente al que aparece en tu código.