3

我在 pdf 文件中有一个表格,其中包含超过 100000 行和超过 1900 页,我决定使用 R 包将其写入 .csv 文件tabulizer

当我尝试从pdf文件中提取整个数据时

pdf <- extract_tables("pdffile.pdf", method = "csv")

我得到一个错误,

.jcall 中的错误(“rjavatools”、“ljava/lang/object;”、“invokemethod”、cl、:java.lang.outofmemoryerror:超出 gc 开销限制

因此我采用了另一种方法。

我所做的是一页一页地提取 pdf 文件,并将输出保存为 .csv 文件。

1)获取pdf文件的页数

pdfPages <- length(get_page_dims("pdffile.pdf"))

2) 创建一个 for 循环来为每个页面存储一个 .csv 文件。

for (i in 1:pdfPages) {
    page <- extract_tables("pdffile.pdf", pages = i, method = "data.frame")
    write.csv(page, file = paste(i,".csv", sep = ""))
}

3)然后创建另一个循环来逐个读取每个文件,并将其rbind到下一个。

dataPdf  <- data.frame() # to rbind each .csv file
for (i in c(1:pdfPages)){
    page <- read.csv(paste(i,".csv", sep = ""))
    dataPdf <- bind_rows(dataQuilpue, page) 
}

我不得不bind_rows()dplyr包中使用,因为并非所有 .csv 文件都以相同数量的列结尾。

结果非常令人满意,尽管完成了大约 1.75 小时,所以我在想也许有更好的方法来做到这一点。有任何想法吗?

4

0 回答 0