我在 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 小时,所以我在想也许有更好的方法来做到这一点。有任何想法吗?