web-dev-qa-db-fra.com

Lecture des données des fichiers PDF dans R

Est-ce que c'est possible!?!

J'ai un tas de rapports hérités que je dois importer dans une base de données. Cependant, ils sont tous au format pdf. Existe-t-il des packages R pouvant lire le pdf? Ou devrais-je laisser cela à un outil de ligne de commande?

Les rapports ont été rédigés dans Excel puis pdf, ils ont donc une structure régulière, mais de nombreuses "cellules" vides.

49
Justin

Juste un avertissement à ceux qui espèrent extraire des données: PDF est un conteneur, pas un format. Si le document original ne contient pas de texte réel, par opposition aux images bitmap de texte ou éventuellement même des choses plus laides que je ne peux l'imaginer, rien d'autre que l'OCR ne peut vous aider.

En plus de cela, dans ma triste expérience, il n'y a aucune garantie que les applications qui créent PDF se comportent tous de la même manière, de sorte que les données de votre tableau peuvent ou non être lues dans l'ordre souhaité ( en raison de la façon dont le document a été construit).

Il est probablement préférable que deux étudiants diplômés transcrivent les données pour vous. Ils sont bon marché :-)

21
Carl Witthoft

Donc ... cela me rapproche même sur une table assez complexe.

Téléchargez un exemple de pdf à partir de pdf bmi

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)
31
Justin

Le package actuel du jour pour extraire le texte des PDF est pdftools (successeur de Rpoppler, noté ci-dessus) ), fonctionne très bien sur Linux, Windows et 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])
9
Ben

Vous pouvez également (maintenant) utiliser le nouveau (2015-07) Rpoppler pacakge:

Rpoppler::PDF_text(file)

Il comprend 3 fonctions (4, vraiment, mais une vous donne juste un point à l'objet PDF):

  • PDF_fonts PDF informations sur la police
  • PDF_info PDF informations sur le document
  • PDF_text PDF extraction de texte

(publication comme réponse pour aider les nouveaux chercheurs à trouver le package).

6
hrbrmstr

per zx8754 ... les éléments suivants fonctionnent dans Win7 avec pdftotext.exe dans le répertoire de travail:

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