2012-02-07 1368 views
49

¿Eso es posible?Leyendo datos de archivos PDF en R

Tengo un montón de informes heredados que necesito importar a una base de datos. Sin embargo, están todos en formato pdf. ¿Hay algún paquete R que pueda leer el pdf? ¿O debería dejar eso en una herramienta de línea de comando?

Los informes se hicieron en excel y luego en pdf, por lo que tienen estructura regular, pero muchas "celdas" en blanco.

+2

Tomando una mirada a CRAN, hay no parece ser una biblioteca que hace eso. Tal vez sea mejor que use otro idioma que tenga tales bibliotecas (Perl y Python, por ejemplo, ambos las tienen), tome los datos que necesita y luego guárdelos en un archivo que pueda leer R. –

+1

@JackManey Gracias , es lo que pensaba. Hay 'readPDF' en el paquete' tm' (minería de textos), pero no es exactamente fácil de usar y creo que usa la utilidad de línea de comando 'pdftotext' de todos modos. – Justin

+4

Tienes mis condolencias. ¡Quizás algún día vivamos en un mundo donde todos los datos estén disponibles como datos! –

Respuesta

20

Sólo una advertencia a otros que pueden estar esperando para extraer datos: PDF es un contenedor, no es un formato. Si el documento original no contiene texto real, a diferencia de las imágenes de texto con mapa de bits o posiblemente incluso cosas más feas de lo que puedo imaginar, nada más que OCR puede ayudarlo.

Además de eso, en mi triste experiencia, no hay garantía de que las aplicaciones que crean documentos PDF se comporten todas iguales, por lo que los datos en su tabla pueden leerse o no en el orden deseado (como resultado del forma en que se construyó el documento). Ser cauteloso.

Probablemente sea mejor hacer que un par de estudiantes de posgrado transcriban los datos por usted. Son :-) barato

+1

¡Deseo! Algunos de nosotros no tenemos estudiantes de posgrado para hacer nuestra oferta. Y estoy demasiado bajo en el tótem para contratar pasantes (leer lacayos). ¡Pero buenos consejos! – Justin

+13

Mechanical Turk? :-) –

+0

@CarlWitthoft ¡Aceptaré tu respuesta! Particularmente la última línea. – Justin

31

Entonces ... esto me acerca incluso en una mesa bastante compleja.

descargar un archivo PDF muestra de bmi pdf

library(tm) 

pdf <- readPDF(PdftotextOptions = "-layout") 

dat <- pdf(elem = list(uri='bmi_tbl.pdf'), language='en', id='id1') 

dat <- gsub(' +', ',', dat) 
out <- read.csv(textConnection(dat), header=FALSE) 
+0

Yo soy encontrándose con problemas que no sé cómo resolver. La siguiente línea 'dat <- pdf (elem = list (uri = 'C: /Users/Farrel/Downloads/bmi_tbl.pdf'), language = 'en', id = 'id1')' produce el siguiente error 'Error en el archivo (con, "r"): no se puede abrir la conexión Además: Mensaje de advertencia: En el archivo (con, "r"): no se puede abrir el archivo 'C: \ Users \ Farrel \ AppData \ Local \ Temp \ RtmpegXWQ3 \ pdfinfo57c9716105 ': No hay tal archivo o directorio'. – Farrel

+0

no parece funcionar para mí. Quiero extraer algo de texto de eso. déjame saber cómo puedo hacerlo. –

+0

Esto me da un error. en la primera linea! – Bob

3

por zx8754 ... las siguientes obras en Win7 con pdftotext.exe en el directorio de trabajo:

library(tm) 
uri = 'bmi_tbl.pdf' 
pdf = readPDF(control = list(text = "-layout"))(elem = list(uri = uri), 
               language = "en", id = "id1") 
+0

vamos a leer datos en pdf a un documento html en R markdown –

6

Usted puede también (ahora) utilizar el nuevo (2015-07) Rpoppler thepacakge:

Rpoppler::PDF_text(file) 

Incluye 3 funciones (4, de verdad, pero uno solo se consigue un ptr al objeto PDF):

  • PDF_fonts PDF información de fuentes
  • PDF_info información del documento PDF
  • PDF_text PDF extracción de texto

(publicar como una respuesta a ayudar a los nuevos usuarios a encontrar el paquete).

8

El paquete actual du jour para conseguir el texto de archivos PDF es pdftools (sucesor Rpoppler, señaló más arriba), funciona muy bien en Linux, Windows y OSX:

install.packages("pdftools") 
library(pdftools) 
download.file("http://arxiv.org/pdf/1403.2805.pdf", "1403.2805.pdf", mode = "wb") 
txt <- pdf_text("1403.2805.pdf") 

# first page text 
cat(txt[1]) 

# second page text 
cat(txt[2]) 
+0

Me gusta este paquete. – Yimihua

+0

También puede encontrar que https://github.com/ropenscilabs/tabulizer es útil para extraer datos de tablas en archivos PDF – Ben

+0

@Ben esto funcionó por primera vez para mí; gran respuesta. Por cierto, la frase francesa es "du jour", que se traduce como "del día", no "de jour", que significa "del día". Perdón por ser pedante :-) – hackR