2012-02-07 3 views
49

Возможно ли это!?!Чтение данных из файлов PDF в R

У меня есть группа устаревших отчетов, которые мне нужно импортировать в базу данных. Тем не менее, они все в формате pdf. Есть ли какие-либо пакеты R, которые могут читать pdf? Или я должен оставить это для инструмента командной строки?

Отчеты были сделаны в формате excel, а затем в формате pdf, поэтому они имеют регулярную структуру, но много пустых «ячеек».

+2

Принимая взгляд на CRAN, там похоже, не является какой-либо библиотекой, которая это делает. Возможно, вам лучше использовать другой язык, на котором есть такие библиотеки (например, Perl и Python), захватывая нужные вам данные, а затем записывая их в файл, который может быть прочитан R. –

+1

@JackManey Спасибо , это то, о чем я думал. Существует 'readPDF' в пакете' tm' (text mining), но он не совсем удобен для пользователя, и я думаю, что он использует утилиту командной строки 'pdftotext' под капотом в любом случае. – Justin

+4

У вас есть мои симпатии. Может быть, когда-нибудь мы будем жить в мире, где все данные доступны как данные! –

ответ

20

Просто предупреждение для тех, кто может быть надеющихся для извлечения данных: PDF является контейнером, не формат. Если исходный документ не содержит фактического текста, в отличие от растровых изображений текста или, возможно, даже более уродливых вещей, чем я могу себе представить, ничего, кроме OCR, может вам помочь.

Кроме того, в моем печальном опыте нет гарантии, что приложения, которые создают документы PDF, ведут себя одинаково, поэтому данные в вашей таблице могут быть или не быть считаны в желаемом порядке (в результате путь, который был построен доктором). Будь осторожен.

Наверное, лучше сделать пару студентов-градиентов, которые транскрибируют данные для вас. Они дешевы :-)

+1

Желаю! Некоторые из нас не имеют студентов-градиентов, чтобы делать наши предложения. И я слишком низко на тотемном столбе, чтобы нанять стажеров (читайте лакеев). Но хороший совет! – Justin

+13

Механический турк? :-) –

+0

@CarlWitthoft Я приму свой ответ! В частности, последняя строка. – Justin

31

Итак ... это меня закрыло даже на довольно сложном столе.

Скачать образец PDF из 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

Я сталкиваясь с проблемами, которые я не знаю, как их решить. Следующая строка 'dat <- pdf (elem = list (uri = 'C: /Users/Farrel/Downloads/bmi_tbl.pdf), язык =' en ', id =' id1 ')' вызывает следующую ошибку: Ошибка в файле (con, «r»): невозможно открыть соединение Кроме того: Предупреждающее сообщение: В файле (con, «r»): не может открыть файл 'C: \ Users \ Farrel \ AppData \ Local \ Temp \ RtmpegXWQ3 \ pdfinfo57c9716105 ': Нет такого файла или каталога'. – Farrel

+0

, похоже, это не работает для меня. Я хочу извлечь из этого текст. дайте мне знать, как я могу это сделать. –

+0

Это дает мне ошибку. на первой линии! – Bob

3

за zx8754 ... следующие работы в Win7 с pdftotext.exe в рабочем каталоге:

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

мы будем читать pdf-данные в html-документе в R markdown –

6

Вы также можете (сейчас) использовать новый (2015-07) Rpoppler Pacakge:

Rpoppler::PDF_text(file) 

Она включает в себя 3 функции (4, на самом деле, но один только получает вас PTR к объекту PDF):

  • PDF_fonts PDF шрифте
  • PDF_info информация PDF документ
  • PDF_text PDF текст экстракция

(размещение в ответ, чтобы помочь новым поисковики найти пакет).

8

Текущий пакет дежурные для получения текста из PDF-файлов является pdftools (преемник Rpoppler, было отмечено выше), отлично работает на Linux, Windows и 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

Мне нравится этот пакет. – Yimihua

+0

Вы также можете найти https://github.com/ropenscilabs/tabulizer, полезный для извлечения данных из таблиц в файлах PDF – Ben

+0

@Ben это сработало впервые для меня; отличный ответ. Кстати: французская фраза «du jour», которая переводится как «дня», а не «de jour», означающая «дня». Извините за педантичность :-) – hackR