【问题标题】:Scraping PDF tables based on title根据标题抓取 PDF 表格
【发布时间】:2020-11-26 16:40:55
【问题描述】:

我正在尝试从 31 个 pdf 中分别提取一个表。表格的标题都以相同的方式开始,但结束因地区而异。

其中一份文件的标题是“表 13.1:2011/12 农业年度按地区、农村和城市居住的从事农业的家庭总数;阿鲁沙地区,2012 年人口普查”。另一个是“表 13.1:2011/12 农业年度按地区、农村和城市居民分列的从事农业的家庭总数;多多马地区,2012 年人口普查。”

我使用 tabulizer 根据我需要的特定文本行手动抓取第一个表,但考虑到类似的命名约定,我希望自动化这个过程。

```
PATH2<-  "Regions/02. Arusha Regional Profile.pdf"
```
txt2 <- pdf_text(PATH2) %>%
readr:: read_lines()
```
specific_lines2<- txt2[4621:4639] %>%
str_squish() %>%
str_replace_all(",","") %>%
strsplit(split = " ")

【问题讨论】:

    标签: r tabulizer


    【解决方案1】:

    什么:您可以在每个文件上找到标题的公共部分并从中提取数据(如果每个文件只出现一次标题)

    如何:构建一个函数来获取 pdf 上的表格,然后让 lapply 上的函数为所有 pdf 运行。

    例子:

    首先,加载函数以查找包含标题的页面并从中获取文本。

      get_page_text <- function(url,word_find) {
      txt <- pdftools::pdf_text(url)
      p <- grep(word_find, txt, ignore.case = TRUE)[1]       # Sentence to find
      L <- tabulizer::extract_text(url, pages = p)    
      i <- which.max(lengths(L))
      data.frame(L[[i]])
      }
    

    其次,获取文件名。

    setwd("C:/Users/xyz/Regions")
    files <- list.files(pattern = "pdf$|PDF$") # Get file names on the folder Regions.
    

    然后,“循环”(lapply)为每个 pdf 运行函数。

    reports <- lapply(files,
                      get_page_text,
                      word_find = "Table 13.1: Total Number of Households Engaged in Agriculture by District, Rural and Urban Residence During 2011/12 Agriculture Year")
    

    结果是一个变量列表,其中每个提取的 pdf 都有一个 data.frame。接下来是清理您的数据。

    根据您的 pdf 格式,该功能可能会有很大差异。找到页面对我来说很有效,你会找到最适合你的。

    【讨论】:

      猜你喜欢
      • 2015-07-04
      • 2021-03-06
      • 1970-01-01
      • 2021-07-25
      • 2020-05-01
      • 2021-06-28
      • 2016-12-05
      • 2021-03-18
      • 1970-01-01
      相关资源
      最近更新 更多