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.

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!

Tags:  , , ,

Answer

  1. Avatar for 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 bucle for. 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 bucle for para recorrer cada archivo y extraer el texto específico utilizando el código que proporcionaste en la pregunta. Luego utilizamos la función bind_rows() del paquete dplyr para agregar los resultados de cada archivo al result_df. Finalmente, visualizamos el result_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.

Comments are closed.