从PDF图表中提取数值到R中的变量

时间:2018-04-09 15:41:51

标签: r web-scraping tm

我试图从嵌入在pdf中的图表中提取数值。

我尝试了以下两种方法,但除了折线图信息之外,我能够将所有其他信息转换为xlsx

链接到pdf: http://blog.mass.gov/publichealth/wp-content/uploads/sites/11/2018/01/Weekly-Flu-Report-01-19-2018.pdf

我需要输入变量

的值

第一种方法

library(pdftools)
library(stringr)
library(xlsx)
set.seed(100)
tx <- pdf_text("flureport.pdf")
tx2 <- unlist(str_split(tx, "[\\r\\n]+"))
tx3 <- str_split_fixed(str_trim(tx2), "\\s{2,}", 5)

write.xlsx(tx3, file="ds.xlsx")

第二种方法

library('tm')
file <- 'flureport.pdf'
Rpdf <- readPDF(control = list(text = "-layout"))
corpus <- VCorpus(URISource(file), 
                  readerControl = list(reader = Rpdf))
corpus.array <- content(content(corpus)[[1]])


c<-data.frame(corpus.array)
write.xlsx(c, file="x.xlsx") 

我写的xlsx都没有包含任何图表信息,所以我可以获取值

1 个答案:

答案 0 :(得分:0)

这是对我有用的解决方案,不确定它是否适用于所有情况,但它确实在这种特殊情况下起作用。 感谢@ user2554330提及OCR

    library(pdftools)
    library(stringr)
    library(tesseract)
    library(magick)
    library(magrittr)

list <- c('http://blog.mass.gov/publichealth/wp-content/uploads/sites/11/2018/01/Weekly-Flu-Report-01-19-2018.pdf')
sapply(list, function(x)
  pdf_convert(x, format = "png", pages = NULL, filenames = NULL, dpi = 300, opw = "", upw = "", verbose = TRUE))



text <- image_read("Weekly-Flu-Report-01-19-2018_1.png") %>%
  image_resize("2000") %>%
  image_convert(colorspace = 'gray') %>%
  image_trim() %>%
  image_ocr()


a<-print(text)


massili<-regmatches(a, gregexpr("\\d+(\\.\\d+){0,1} %", a))[[1]]