1

我正在尝试从 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 = " ")
4

1 回答 1

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 格式,该功能可能会有很大差异。找到页面对我来说很有效,你会找到最适合你的。

于 2020-08-27T20:48:00.283 回答