我想使用R从成千上万的PDF文档中有效地提取表格数据。我通常会将PDF数据转换为文本字符串,然后按位置提取信息,但这些特定的表通常缺少数据,如下面的示例所示。缺少数据的位置因文档而异。有人能建议一种方法吗?PDF类型示例
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]
tabulizer
tab <- tabulizer::extract_tables(file = "path/file.pdf", pages = 10:16)
pdftools
text <- pdftools::pdf_text("path/file.pdf")[10:16]
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"
2条答案
按热度按时间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]
qltillow2#
下面的解决方案只适用于Windows。我从上面的图片开始。使用下面的代码,我已经能够提取表: