2016-12-27 1 views
4

https://www.dol.gov/ui/data.pdf에있는 pdf에서 데이터를 추출하려고합니다. 내가 관심있는 자료는 PDF의 4 페이지에 있으며, 초기 청구 (NSA), 피보험자 실업 (NSA) 3 관측, 적용 대상 고용에 사용 된 가장 최근의 주 (3) .PDF의 특정 위치에서 데이터를 추출 하시겠습니까?

pdftools를 사용하여 PDF를 R로 읽었지만 생성 된 텍스트 출력이 꽤 못 생깁니다 (PDF의 특성으로 인해 예상되는 종류). 이 텍스트 출력에서 ​​특정 데이터를 추출 할 수있는 방법이 있습니까? 데이터가 항상 출력의 동일한 위치에있을 것이라고 생각합니다. 이것이 도움이됩니다.

의 I는 다음과 같은 스크립트를 볼 수 있습니다 찾고 있어요 출력 : 나는 비슷한 문제를 가진 사람들을 검색 및 스캔()와 그렙() 주변에 바이올린을 한

library(pdftools) 

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

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

만은 할 수 없습니다 텍스트 출력에서 ​​필요한 데이터를 분리하고 추출하는 방법을 찾는 것처럼 보입니다. 누군가가 이것에 비틀 거리고 옳은 방향으로 나를 가르 킬 수 있다면 미리 감사드립니다 - 그렇지 않다면 이것을 알아 내려고 할 것입니다! 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 

당신은 여전히 ​​숫자를 구문 분석해야합니다,하지만 적어도이 가능합니다.

관련 문제