如何在R中有效地从PDF中提取表格数据?

9nvpjoqh  于 2023-04-18  发布在  其他
关注(0)|答案(2)|浏览(216)

我想使用R从成千上万的PDF文档中有效地提取表格数据。我通常会将PDF数据转换为文本字符串,然后按位置提取信息,但这些特定的表通常缺少数据,如下面的示例所示。缺少数据的位置因文档而异。有人能建议一种方法吗?
PDF类型示例

3zwjbxry

3zwjbxry1#

有两个软件包,我使用这个。哪个更好取决于你需要做什么。假设你的表格在PDF的第10-16页:
1.您应该能够使用tabulizer包从上述页面中提取数据:
tab <- tabulizer::extract_tables(file = "path/file.pdf", pages = 10:16)
1.如果你只需要文本,你应该使用pdftools,这要快得多:
text <- pdftools::pdf_text("path/file.pdf")[10:16]

qltillow

qltillow2#

下面的解决方案只适用于Windows。我从上面的图片开始。使用下面的代码,我已经能够提取表:

library(RDCOMClient)
library(magick)

################################################
#### Step 1 : We convert the image to a PDF ####
################################################

path_PDF <- "C:\\temp.pdf"
path_PNG <- "C:\\lP3hw.png"
path_Word <- "C:\\temp.docx"

pdf(path_PDF, width = 16, height = 6)
im <- image_read(path_PNG)
plot(im)
abline(h = 50, col = "black")
abline(h = 100, col = "black")
abline(h = 130, col = "black")
abline(h = 260, col = "black")
dev.off()

####################################################################
#### Step 2 : We use the OCR of Word to convert the PDF in word ####
####################################################################
wordApp <- COMCreate("Word.Application")
wordApp[["Visible"]] <- TRUE
wordApp[["DisplayAlerts"]] <- FALSE

doc <- wordApp[["Documents"]]$Open(normalizePath(path_PDF),
                                   ConfirmConversions = FALSE)

doc$SaveAs2(path_Word)

##############################################################
#### Step 3 : We extract the table from the word document ####
##############################################################

nb_Row <- doc$tables(1)$Rows()$Count()
nb_Col <- doc$tables(1)$Columns()$Count()
mat_Temp <- matrix(NA, nrow = nb_Row, ncol = nb_Col)

for(i in 1 : nb_Row)
{
  for(j in 1 : nb_Col)
  {
    mat_Temp[i, j] <- tryCatch(doc$tables(1)$cell(i, j)$range()$text(), error = function(e) NA)
  }
}

mat_Temp

[,1]              [,2]            [,3]                                                                            [,4]          [,5]       [,6]      
[1,] "\r\a"            "/\r\a"         NA                                                                              NA            NA         NA        
[2,] "\r\a"            "/\r\a"         "1 sand, 2\tmg/kg\tmglkg\tpH\tpH\tdS/m sandy loam, 3 loam, 4 loamy clay, 5 clay\r\a" NA            NA         NA        
[3,] "30 May 2018\r\a" "0-10\r\a"      "\t520\t23.00\r\a"                                                                "Colwell\r\a" "7_09\r\a" "6_70\r\a"
[4,] "30 May 2018\r\a" "\t10-60\t50\r\a" "9.0\r\a"                                                                       "\r\a"        "8_50\r\a" "7_80\r\a"
     [,7]      [,8]      
[1,] NA        NA        
[2,] NA        NA        
[3,] "0.1\r\a" "0.93\r\a"
[4,] "0.1\r\a" "3.3\r\a"

相关问题