从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")