2012-02-07 317 views
49

甚至可能!!!從PDF文件讀取數據到R

我有一堆遺留報告,我需要導入到數據庫中。但是,它們都是pdf格式。有沒有可以閱讀pdf的任何R包?或者我應該把它留給命令行工具?

這些報告是在excel中進行的,然後是pdfed的,所以它們具有規則的結構,但是有許多空白的「單元格」。

+2

以一看之下,似乎沒有任何圖書館這樣做。使用另一種具有此類庫的語言(例如,Perl和Python,例如都有)可能會更好,抓取所需的數據,然後將它寫入可由R讀取的文件中。 – 2012-02-07 23:51:17

+1

@JackManey謝謝, 我也這麼想。在'tm'包(文本挖掘)中有'readPDF',但它不是用戶友好的,我認爲它在引擎蓋下使用命令行實用程序'pdftotext'。 – Justin 2012-02-07 23:56:03

+4

你有我的同情心。也許有一天我們會生活在一個所有數據都可以作爲數據的世界! – 2012-02-08 00:21:57

回答

20

只是一個警告下載樣本PDF到其他人誰可能希望提取數據:PDF是一種容器,不是一個格式。如果原始文檔不包含實際文字,與文字的位圖圖像或可能甚至比我能想象的更醜陋的東西相反,沒有什麼比OCR更能幫助您。

最重要的是,在我悲傷的體驗中,不能保證創建PDF文檔的應用程序的行爲都是相同的,因此表中的數據可能會或不會以所需的順序讀取(因爲文檔的構建方式)。要小心。

可能更好地讓一對夫婦研究生爲你轉錄數據。他們很便宜:-)

+1

我希望!我們有些人沒有研究生來做我們的競標。我在圖騰柱上僱傭實習生的情況太少了(看過走狗)。但好建議! – Justin 2012-02-08 02:44:58

+13

機械土耳其人? :-) – 2012-02-08 04:29:08

+0

@CarlWitthoft我會接受你的回答!特別是最後一行。 – Justin 2012-02-09 15:41:41

31

所以......即使在一張相當複雜的桌子上,這也讓我親近。

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'),language ='en',id ='id1')'產生如下錯誤:Error (con,「r」):無法打開連接 此外:警告消息: 在文件(con,「r」)中: 無法打開文件'C:\ Users \ Farrel \ AppData \ Local \ Temp \ RtmpegXWQ3 \ pdfinfo57c9716105':沒有這樣的文件或目錄。 – Farrel 2013-11-29 15:44:37

+0

它似乎不適合我。我想從中提取一些文本。讓我知道我該怎麼做。 – 2015-03-23 04:48:53

+0

這給了我一個錯誤。在第一行! – Bob 2016-08-17 02:24:12

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數據到R markdown – 2017-08-03 09:40:38

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:在CRAN

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

的html文檔我喜歡這個軟件包。 – Yimihua 2016-09-13 18:47:13

+0

你也許會發現https://github.com/ropenscilabs/tabulizer對於從PDF文件中的表格提取數據很有用 – Ben 2016-09-13 20:44:30

+0

@Ben這對我來說是第一次工作;很好的答案。順便說一句:法語短語是「du jour」,意思是「當日」,而不是「de jour」意思是「日」。對不起,很迂腐:-) – hackR 2016-12-15 20:50:36