将 PDF 文件中的数据读入 R

Posted

技术标签:

【中文标题】将 PDF 文件中的数据读入 R【英文标题】:Reading data from PDF files into R 【发布时间】:2012-02-29 10:42:26 【问题描述】:

这可能吗!?!

我有一堆旧报告需要导入数据库。但是,它们都是pdf格式的。有没有可以阅读 pdf 的 R 软件包?还是我应该把它留给命令行工具?

报告是用 excel 制作的,然后是 pdf 格式的,所以它们的结构很规则,但有很多空白的“单元格”。

【问题讨论】:

看一眼 CRAN,似乎没有任何图书馆可以做到这一点。您最好使用另一种具有此类库的语言(例如 Perl 和 Python,两者都有),获取您需要的数据,然后将其写入 R 可以读取的文件。 @JackManey 谢谢,我就是这么想的。在tm 包(文本挖掘)中有readPDF,但它并不完全是用户友好的,我认为它无论如何都使用命令行实用程序pdftotext 你有我的同情。也许有一天我们会生活在一个所有数据都可以作为数据使用的世界中! @gsk3 (+1) 我很感激你的哀悼......我大部分时间都希望这样做。既然人们都在关注,而我看起来不够努力……(***.com/questions/3852354/…)证实了我的怀疑。 还有grImport包,它可以读取PDF文件,但它是用来提取矢量图形的——文本也会在那里,但可能不是非常有用的形式。 【参考方案1】:

所以...即使在相当复杂的桌子上,这也能让我接近。

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

【讨论】:

我遇到了不知道如何解决的问题。以下行 dat &lt;- pdf(elem = list(uri='C:/Users/Farrel/Downloads/bmi_tbl.pdf'), language='en', id='id1') 产生以下错误 Error in file(con, "r") : cannot open the connection In addition: Warning message: In file(con, "r") : cannot open file 'C:\Users\Farrel\AppData\Local\Temp\RtmpegXWQ3\pdfinfo57c9716105': No such file or directory 它似乎对我不起作用。我想从中提取一些文本。让我知道我该怎么做。 它显示一个错误未使用的参数(PdftotextOptions = "-layout")调用【参考方案2】:

只是对可能希望提取数据的其他人的警告:PDF 是一种容器,而不是一种格式。如果原始文档不包含实际文本,而不是文本的位图图像,或者可能比我想象的更丑陋的东西,那么 OCR 可以帮助您。

最重要的是,在我悲惨的经历中,不能保证创建 PDF 文档的应用程序的行为都相同,因此表中的数据可能会或可能不会按所需顺序读出(由于方式该文档已构​​建)。要小心。

让几个研究生为您转录数据可能会更好。它们很便宜:-)

【讨论】:

我希望!我们中的一些人没有研究生来做我们的竞标。而且我在图腾柱上的地位太低,无法雇用实习生(阅读走狗)。但好建议! @CarlWitthoft 我会接受你的回答!特别是最后一行。 人类很糟糕。我知道,因为我是其中之一,而且我认识很多其他人。他们擅长三件事:解决新问题;创造力(音乐、艺术和文学);以及人际情感支持或说服。不能依赖它们来转录。【参考方案3】:

当前用于从 PDF 中获取文本的软件包 du jourpdftools(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])

【讨论】:

我喜欢这个包。 您可能还会发现github.com/ropenscilabs/tabulizer 可用于从 PDF 文件中的表格中提取数据 @Ben 这对我来说是第一次;很好的答案。顺便说一句:法语短语是“du jour”,意思是“当天”,而不是“de jour”,意思是“当天”。很抱歉学究了:-) @hackR 感谢 beaucoup pour votre commentaire ;)【参考方案4】:

您也可以(现在)使用新的 (2015-07) Rpoppler pacakge:

Rpoppler::PDF_text(file)

它包括 3 个函数(实际上是 4 个,但一个只是为您提供 PDF 对象的指针):

PDF_fontsPDF字体信息 PDF_infoPDF文档资料 PDF_textPDF文本提取

(发布作为帮助新搜索者找到包裹的答案)。

【讨论】:

【参考方案5】:

per zx8754 ...以下工作在Win7中,工作目录中有pdftotext.exe:

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

【讨论】:

以上是关于将 PDF 文件中的数据读入 R的主要内容,如果未能解决你的问题,请参考以下文章

将多条csv行读入R中的单行

R - 如何在 R 中读取多个 png 文件并编织成 pdf?

将 ASC 文件读入 R

将 Microsoft SQL Server 中的数据读入 R

如何把MATLAB中的数据读入到SIMULINK中

无法将 unicode .csv 读入 R