2016-12-27 10 views
4

私はpdfからデータを抽出しようとしています。これはhttps://www.dol.gov/ui/data.pdfにあります。私が興味を持っているデータは、PDFの4ページにあり、最初のクレーム(NSA)、3つの被保険者失業(NSA)、3週間の被雇用(脚注2) 。PDFの特定の位置からデータを抽出していますか?

私は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] 

私は同様の質問を持つ人々を検索し、スキャンして周りいじっ()とgrep()することはできませんが、しましたテキスト出力から必要なデータを分離して抽出する方法を見つけ出すようです。誰かがこれに遭遇し、正しい方向に私を指すことができる場合は事前に感謝 - 私はこれを把握しようとしているでしょう! grepと少し正規表現で

答えて

6

、あなたが使用可能な構造に必要なものすべてを取得することができます

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 

をあなたはまだ数字を解析する必要がありますが、少なくとも、それが使用可能です。

関連する問題