Extracción de datos de texto de archivos PDF


¿Es posible analizar datos de texto de archivos PDF en R? Existe no parece ser un paquete relevante para dicha extracción, pero alguien ha intentado o ha visto a este hecho en R?

En Python hay PDFMiner, pero me gustaría mantener este análisis todo en R si es posible.

Alguna sugerencia?

Author: Community, 2010-10-04

7 answers

Los sistemas Linux tienen pdftotext con lo cual tuve un éxito razonable. Por defecto, crea foo.txt a partir de un give foo.pdf.

Dicho esto, los paquetes de minería de texto pueden tener convertidores. A rápido rseek.org search parece coincidir con su búsqueda crantastic.

 28
Author: Dirk Eddelbuettel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-04 01:56:22

Este es un hilo muy antiguo, pero para referencia futura: el paquete pdftools R extrae texto de archivos PDF.

 26
Author: Remko Duursma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-06 08:08:13

Un colega me puso en contacto con esta útil herramienta de código abierto: http://tabula.nerdpower.org / . Instale, cargue el PDF y seleccione la tabla en el PDF que requiere data-ization. No es una solución directa en R, pero sin duda mejor que el trabajo manual.

 9
Author: NiuBiBang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-05 17:48:47

Una solución puramente R podría ser:

library('tm')
file <- 'namefile.pdf'
Rpdf <- readPDF(control = list(text = "-layout"))
corpus <- VCorpus(URISource(file), 
      readerControl = list(reader = Rpdf))
corpus.array <- content(content(corpus)[[1]])

Entonces tendrá líneas pdf en una matriz.

 9
Author: willallgs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-06 22:27:02

La aplicación tabula PDF table extractor se basa en una aplicación de línea de comandos basada en un paquete Java JAR, tabula-extractor.

El paquete R tabulizer proporciona una envoltura R que facilita el paso de la ruta a un archivo PDF y obtener datos extraídos de tablas de datos.

Tabula tendrá una buena oportunidad de adivinar dónde están las tablas, pero también puede indicarle qué parte de una página mirar especificando un área de destino de la página.

Los datos se pueden extraer de varias páginas, y se puede especificar un área diferente para cada página, si es necesario.

Para ver un ejemplo de caso de uso, consulte: Cuando los documentos se Convierten en Bases de datos – Tabulizer R Wrapper for Tabula PDF Table Extractor.

 5
Author: psychemedia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-02 13:34:02
install.packages("pdftools")
library(pdftools)


download.file("http://www.nfl.com/liveupdate/gamecenter/56901/DEN_Gamebook.pdf", 
              "56901.DEN.Gamebook", mode = "wb")

txt <- pdf_text("56901.DEN.Gamebook")
cat(txt[1])
 4
Author: DataProphets,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-20 04:18:55

Utilicé una utilidad externa para hacer la conversión y la llamé desde R. Todos los archivos tenían una tabla inicial con la información deseada

Establecer la ruta a pdftotxt.exe y convertir pdf a texto

exeFile <- "C:/Projects/xpdfbin-win-3.04/bin64/pdftotext.exe"

for(i in 1:length(pdfFracList)){
    fileNumber <- str_sub(pdfFracList[i], start = 1, end = -5)
    pdfSource <- paste0(reportDir,"/", fileNumber, ".pdf")
    txtDestination <- paste0(reportDir,"/", fileNumber, ".txt")
    print(paste0("File number ", i, ", Processing file ", pdfSource))
    system(paste(exeFile, "-table" , pdfSource, txtDestination, sep = " "), wait = TRUE)
}
 2
Author: Alastair Muir,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-07 23:08:04