2012-02-07 26 views
49

Czy to nawet możliwe!?!Czytanie danych z plików PDF na R

Mam kilka starszych raportów, które muszę zaimportować do bazy danych. Jednak wszystkie są w formacie pdf. Czy są jakieś pakiety R, które mogą odczytać pdf? Czy powinienem zostawić to narzędzie wiersza poleceń?

Raporty zostały wykonane w programie Excel, a następnie w formacie PDF, więc mają regularną strukturę, ale wiele pustych "komórek".

+2

Biorąc okiem na CRAN, tam nie wygląda na bibliotekę, która to robi. Lepiej możesz użyć innego języka, który ma takie biblioteki (Perl i Python, na przykład oba je mają), chwytając potrzebne dane, a następnie zapisując je do pliku, który może być odczytany przez R. –

+1

@JackManey Dzięki , tak myślałem. W pakiecie 'tm' znajduje się' readPDF' (eksploracja tekstów), ale nie jest to dokładnie przyjazne dla użytkownika i myślę, że i tak używa on narzędzia komend 'pdftotext' pod maską. – Justin

+4

Masz moje sympatie. Może pewnego dnia będziemy żyć w świecie, w którym wszystkie dane są dostępne jako dane! –

Odpowiedz

20

Tylko ostrzeżenie dla innych, którzy mogą być w nadziei, aby wyodrębnić dane: PDF jest kontenerem, nie format. Jeśli oryginalny dokument nie zawiera faktycznego tekstu, w przeciwieństwie do bitmapowych obrazów tekstu lub nawet brzydszych rzeczy, niż mogę sobie wyobrazić, nic innego jak OCR może ci pomóc.

Co więcej, z mojego smutnego doświadczenia nie ma żadnej gwarancji, że aplikacje tworzące dokumenty PDF zachowują się tak samo, więc dane w tabeli mogą być odczytywane w żądanej kolejności (w wyniku sposób, w jaki dokument został zbudowany). Być ostrożnym.

Prawdopodobnie lepiej, aby uczniowie z kilkoma absolwentami przepisali dane za Ciebie. Są tanie :-)

+1

Życzę! Niektórzy z nas nie mają absolwentów do zrobienia naszej licytacji. A ja jestem zbyt nisko na totemie, żeby zatrudnić stażystów (czytaj lokajów). Ale dobra rada! – Justin

+13

Mechaniczny Turk? :-) –

+0

@CarlWitthoft Przyjmuję twoją odpowiedź! Szczególnie ostatnia linia. – Justin

31

Więc ... to sprawia, że ​​jestem blisko nawet na dość złożonym stole.

Pobierz przykładowy pdf z 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

Jestem boryka się z problemami, których nie potrafię rozwiązać. Następująca linia 'dat <- pdf (elem = list (uri = 'C: /Users/Farrel/Downloads/bmi_tbl.pdf'), language = 'en', id = 'id1')' powoduje wystąpienie następującego błędu 'Błąd w pliku (con, "r"): nie można otworzyć połączenia Ponadto: Komunikat ostrzegawczy: W pliku (con, "r"): nie można otworzyć pliku "C: \ Users \ Farrel \ AppData \ Local \ Temp \ RtmpegXWQ3 \ pdfinfo57c9716105 ': Brak takiego pliku lub katalogu ". – Farrel

+0

to nie działa dla mnie. Chcę wydobyć z tego jakiś tekst. daj mi znać, jak mogę to zrobić. –

+0

Daje mi to błąd. w pierwszej linii! – Bob

3

za zx8754 ... następujące prace w Win7 z pdftotext.exe w katalogu roboczym:

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

Czy powinniśmy czytać dane w formacie PDF do dokumentu HTML w R markdown –

6

Można również (obecnie) stosowanie nowych (2015-07) Rpoppler pacakge:

Rpoppler::PDF_text(file) 

obejmuje on 3 funkcje (4, naprawdę, ale po prostu dostaje się ptr do obiektu PDF):

  • PDF_fonts PDF informacje o czcionce
  • PDF_info informacji dokument PDF ekstrakcji tekstu
  • PDF_text PDF

(wysyłania jako odpowiedź, aby pomóc internautom znaleźć nowy pakiet).

8

Obecny pakiet du jour uzyskania tekst z plików PDF jest pdftools (następca Rpoppler, wspomniano powyżej), działa świetnie na Linux, Windows i 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

Podoba mi się ten pakiet. – Yimihua

+0

Możesz również znaleźć https://github.com/ropenscilabs/tabulizer przydatne do wyodrębniania danych z tabel w plikach PDF – Ben

+0

@Ben to działało dla mnie po raz pierwszy; świetna odpowiedź. btw: francuska fraza to "du jour", co oznacza "dnia", a nie "de jour" oznacza "dzień". Przykro mi, że jestem pedantyczny :-) – hackR