从PDF文件读取数据到R

这甚至可能!!!

我有一堆遗留报告,我需要导入到数据库。 但是,他们都是PDF格式。 有没有可以阅读pdf的R包? 或者我应该把它留给一个命令行工具?

这些报告是用excel表示的,然后是pdf格式的,所以它们有规律的结构,但是有很多空白的“单元格”。

只是向其他可能希望提取数据的人发出警告:PDF是一个容器,而不是一种格式。 如果原始文档不包含实际的文字,而不是位图图像的文字,甚至可能比我想象的更丑陋的东西,没有什么比OCR可以帮助你。

最重要的是,在我悲伤的经历中,不能保证创buildPDF文档的应用程序的行为都是相同的,所以表中的数据可能会或可能不会以所需的顺序读取(由于文档的方式build)。 要小心。

可能更好地让一对夫妇研究生转录数据给你。 他们很便宜:-)

所以…即使在一张相当复杂的桌子上,

从bmi pdf下载样本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) 

目前用于从PDF中获取文本的软件包是pdftools (上文提到的pdftools后继者),在Linux,Windows和OSX上很好用:

 install.packages("pdftools") library(pdftools) download.file("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]) 

你也可以(现在)使用新的(2015-07) Rpoppler

 Rpoppler::PDF_text(file) 

它包括3个函数(4,真的,但只是让你一个ptr的PDF对象):

  • PDF_fonts PDF字体信息
  • PDF_info PDF文档信息
  • PDF_text PDF文本提取

(张贴作为帮助新search者find包裹的答案)。

每个zx8754 …下面的工作在Win7与pdftotext.exe在工作目录中:

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