2017-09-30 10 views
0

Je suis en train de convertir 1000 pdfs en texte pour l'analyse de données. J'utilise le paquet pdftools.convertir le lot de pdf en texte en utilisant pdftools

Je suis en mesure de convertir 2 pdf en utilisant le code suivant:

library(pdftools) 
file_list <- list.files('pdf', full.names = TRUE, pattern = 'pdf') 

for(i in 1:length(file_list)){ 
    temp <- pdf_text(file_list[i]) 
    temp <- tolower(temp) 

    file_name = paste(file_list[i], '.txt') 
    sink(file_name) 
    cat(temp) 
    sink() 

} 

mais quand j'ajoute plus de 2 je reçois l'erreur suivante:

" Error in poppler_pdf_text(loadfile(pdf), opw, upw) : PDF parsing failure." 

aussi, je voudrais la fichier texte final soit seulement « file_name.txt » en ce moment je suis en train de « file_name.pdf txt »

grâce,

Répondre

0
library(pdftools) 
library(purrr) 

setwd("/tmp/test") 

file_list <- list.files(".", full.names = TRUE, pattern = '.pdf$') 

s_pdf_text <- safely(pdf_text) # helps catch errors 

walk(file_list, ~{          # iterate over the files 

    res <- s_pdf_text(.x)        # try to read it in 
    if (!is.null(res$result)) {       # if successful 

    message(sprintf("Processing [%s]", .x)) 

    txt_file <- sprintf("%stxt", sub("pdf$", "", .x)) # make a new filename 

    unlist(res$result) %>%        # cld be > 1 pg (which makes a list) 
     tolower() %>%          
     paste0(collapse="\n") %>%      # make one big text block with line breaks 
     cat(file=txt_file)        # write it out 

    } else {            # if not successful 
    message(sprintf("Failure converting [%s]", .x)) # show a message 
    } 

}) 
+0

Merci @ hrbrmstr! Cependant, je suis capable de convertir seulement 20 sur les 1000 pdf. J'ai essayé d'utiliser un autre code (voir ci-dessous) mais avec ce code le txt. fichier que je reçois sont des caractères corrompus (tous mes fichiers sont en espagnol, donc j'ai plusieurs caractères spéciaux ''ñ, í, ó, ú "et j'ai besoin que tous les caractères soient en minuscules) – Claudia

+0

pdf_files <- list.files (path = paste (getwd(), '/ pdf', sep = ''), pattern = 'pdf', full.names = VRAI) if (length (pdf_files)> 0) { pour (i dans pdf_files) { système ( coller ( coller ('"', getwd(), '/xpdf/bin64/pdftotext.exe"', sep = ''), paste0 ('"', i, '" ')), wait = FALSE) } } cat (' \ nConversion au texte terminée. \ N \ n ') – Claudia

+0

Unfortun Ce n'est pas vraiment possible pour les gens d'écrire tout le code pour vous. Le paquet 'stringi' a' stri_trans_tolower() 'qui aide avec les traductions de différents jeux de caractères. – hrbrmstr