tabulapdf::extract_tables()工作目录错误原因及解决问询
问题:tabulapdf::extract_tables()提取表格成功但报工作目录相关错误
PDF文件及对应目录均存在,调用tabulapdf::extract_tables()能成功提取表格,但返回与工作目录相关的错误,疑似和返回列表的第三个对象有关,需明确错误成因并获取解决建议。
相关代码及输出
x <- list.files(full.names = TRUE)[1] file.exists(x) # [1] TRUE extract_tables(x, method = "decide") # Error : 'TOTAL PAYABLE 75,564.00 10,578.96 86,142.95' does not exist in current working directory ('C:/Users/franc/OneDrive/Documents/Friar Tuck'). # [[1]] # # A tibble: 6 × 8 # QTY ITEM `KG/ITEM` `R/ITEM` `R/KG` EXCL VAT INCL # <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> # 1 2 COW : BLACK 438 8500 19.4 17000 2380 19380 # 2 4 COW : BLK 481 9300 19.3 37200 5208 42408 # 3 1 COW : BLK 455 9400 20.7 9400 1316 10716 # 4 1 HEIFER : BLK 385 8800 22.9 8800 1232 10032 # 5 1 COW : RED 380 8750 23.0 8750 1225 9975 # 6 9+0 NA 4020 NA NA 81150 11361 92511 # # [[2]] # # A tibble: 5 × 5 # `AAM COMMISSION` `5.00%` `4,057.50` `568.05` `4,625.55` # <chr> <chr> <dbl> <dbl> <dbl> # 1 RMLA Statutory Levy 51.0 7.14 58.2 # 2 RPO 0.15% 122. 17.0 139. # 3 FARMERS ASSOC HDLA :: 0.5%m 406. 56.8 463. # 4 TRANSPORT FRYSLAN 950 133 1083 # 5 TOTAL DEDUCTIONS NA 5586. 782. 6368. # # [[3]] # [1] "TOTAL PAYABLE\t75,564.00\t10,578.96\t86,142.95" # # [[4]] # # A tibble: 3 × 7 # `CATEGORY SUMMARY` QTY `R/KG` `TOTAL KG` `KG/ITEM` TOTAL `R/ITEM` # <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> # 1 COW 8 19.9 3635 454 72350 9044. # 2 HEIFER 1 22.9 385 385 8800 8800 # 3 TOTAL 9 20.2 4020 447 81150 9017.
错误成因
extract_tables()的method = "decide"参数会自动判断表格类型,当遇到第三个对象这种纯文本行(非标准表格结构)时,内部逻辑误将该文本内容当作文件路径进行存在性检查,从而抛出工作目录相关错误。- 第三个返回对象是带制表符的纯文本字符串,并非规整的表格,函数的自动识别逻辑出现偏差,错误触发了文件路径验证流程。
解决建议
- 指定提取方法:放弃自动判断,手动选择适合的提取方法。如果PDF中的表格是规整的格子式,使用
method = "lattice";如果是流式文本排版的表格,使用method = "stream",避免误识别。示例代码:extract_tables(x, method = "lattice") - 捕获错误并过滤无效内容:用
tryCatch()包裹函数调用,提取结果后手动过滤掉纯文本类型的元素,只保留表格对象:result <- tryCatch(extract_tables(x, method = "decide"), error = function(e) NULL) valid_tables <- result[sapply(result, is_tibble)] - 预处理PDF:如果PDF中存在这类干扰性的纯文本行,可先用PDF编辑工具移除该部分内容后再进行表格提取,从源头避免识别错误。
内容的提问来源于stack exchange,提问作者altfi_SU
相关产品推荐
相关产品推荐

