从PDF文件的特定位置提取数据?

5
我试图从一个PDF文件中提取数据,该文件位于https://www.dol.gov/ui/data.pdf。 我感兴趣的数据在PDF的第4页上,是初始索赔(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()方法,但是似乎找不到从文本输出中分离和提取所需数据的方法。如果有人能够帮忙指点方向,将不胜感激-否则我会继续努力解决这个问题!

1个回答

6

使用 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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接