r - 从 PDF 的特定位置提取数据?

标签 r pdf

我正在尝试从 pdf 中提取数据,该文件位于 https://www.dol.gov/ui/data.pdf 。我感兴趣的数据位于 PDF 第 4 页,是初始 claim (NSA) 的 3 个观察结果、受保失业 (NSA) 的 3 个观察结果以及最近一周使用的受保就业(脚注 2) 。

我已经使用 pdftools 将 PDF 读入 R,但是生成的文本输出非常难看(有点令人期待 - 由于 PDF 的性质)。有什么方法可以从这个文本输出中提取特定数据吗?我相信数据将始终位于输出中的同一位置,这很有帮助。

我正在查看的输出可以通过以下脚本看到:

library(pdftools)

download.file("https://www.dol.gov/ui/data.pdf", "data.pdf", mode="wb")

uidata <- pdf_text("data.pdf")
uidata[4]

我搜索了有类似问题的人,并摆弄了 scan() 和 grep(),但似乎无法找到一种方法来从文本输出中隔离和提取我需要的数据。如果有人偶然发现这一点并能指出我正确的方向,请提前致谢 - 如果没有,我会尽力解决这个问题!

最佳答案

使用 grep 和一些正则表达式,您可以将所需的所有内容放入可用的结构中:

library(magrittr)

x <- pdftools::pdf_text('https://www.dol.gov/ui/data.pdf')
x2 <- readLines(textConnection(x[4]))
r <- grep('WEEK ENDING', x2)

l <- lapply(seq_along(r), function(i){
    x2[r[i]:(na.omit(c(r[i + 1], grep('FOOTNOTE', x2)))[1] - 1)] %>% 
        trimws() %>% 
        gsub('\\s{2,}', ';', .) %>% 
        paste(collapse = '\n') %>% 
        read.csv2(text = ., dec = '.')
    })

from_footnote <- as.numeric(gsub('^2|\\D', '', x2[grep('2\\.', x2)]))

l[[1]][3,]
#>                      WEEK.ENDING December.17 December.10  Change
#> Initial Claims (NSA)     315,613     305,333     +10,280 352,534
#>                      December.3
#> Initial Claims (NSA)    319,641

from_footnote
#> [1] 138322138

您仍然需要解析这些数字,但至少它是可用的。

关于r - 从 PDF 的特定位置提取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41352386/

相关文章:

r - 如何确定简单回文 R 代码的时间复杂度?

r - 如何用负r在极坐标中绘制点?

html - 您可以在 PDF 文件中嵌入 HTML 网页吗?

python - 使用Python拉取一个目录下所有pdf文档的页数

r - 等分采样向量

r - R 中网络图的自定义线条样式

java - 如何在使用 PDPageContentStream/PDDocument 时处理 Java 中的非 ASCII 字符

python - 使用 python pypdf 合并 PDF 并删除合并的文件

android - 我需要显示一个 PDF,其中 pdf 文本将自动适应屏幕宽度,剩余文本移至下一行

r - 在 Xpath 中同时转义双引号和单引号