You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言批量提取多PDF固定位置表格的报错排查求助

批量提取多PDF固定位置表格的问题排查与解决方案

问题1:lapply加载文件的报错原因与修复

报错1:找不到文件(No such file or directory)

  • 原因:list.files()默认仅返回文件名,而非完整路径。若当前工作目录不是目标文件夹,pdf_text无法定位文件。
  • 修复:调用list.files时添加full.names = TRUE参数,直接生成完整文件路径。

报错2:无效参数(invalid 'description' argument)

  • 原因:lapply的写法错误,直接传入了pdf_text(files1)的执行结果,而非让lapply遍历每个路径并执行函数。
  • 修复:给lapply传入文件路径列表,以及一个接收单个路径的处理函数。

问题2:循环加载后提取行返回NA的原因

  • 原因:for循环每次都会将document_text覆盖为单个PDF的内容,最终document_text仅保留最后一个PDF的文本。后续用lapply处理单个字符串,自然会返回NA。
  • 修复:用lapply自动收集所有PDF的处理结果,或在循环中主动将结果存入列表。

修正后的完整批量处理代码

# 1. 获取目标文件夹下所有PDF的完整路径
files <- list.files(
  path = "data/enrolment/Germany/2023",
  pattern = "pdf",
  full.names = TRUE  # 关键:直接返回完整路径,无需手动拼接
)

# 2. 封装单份PDF的处理逻辑为函数
process_single_pdf <- function(pdf_path) {
  # 读取PDF文本并按行拆分
  PDF <- pdf_text(pdf_path) %>% readr::read_lines()
  
  # 提取固定位置的目标行
  PDF.grass <- PDF[c(21:36)]
  
  # 清理文本并拆分数据
  all_stat_lines <- PDF.grass[1:17] %>%
    str_squish() %>%  # 清除多余空格
    strsplit(split = " ")  # 按空格拆分字段
  
  # 移除多余生成的行
  all_stat_lines <- all_stat_lines[-17]
  
  # 设置数据框列名
  var_lines <- c(
    "State", "#_Allg_29KW", "#_Allg_28kw", "#_Ber_29KW", "#_Ber_28kw",
    "#_Ins_29KW", "#_Ins_28kw", "Cont_Allg_29KW", "Cont_Allg_28kw",
    "Cont_Ber_29KW", "Cont_Ber_28kw", "Cont_Ins_29KW", "Cont_Ins_28kw", "Date"
  )
  
  # 转换为数据框并赋值列名
  df <- plyr::ldply(all_stat_lines)
  colnames(df) <- var_lines
  
  # 新增列标记来源PDF文件,方便后续区分
  df$Source_PDF <- basename(pdf_path)
  
  return(df)
}

# 3. 批量处理所有PDF,合并为一个完整数据框
all_pdf_results <- lapply(files, process_single_pdf) %>% dplyr::bind_rows()

内容的提问来源于stack exchange,提问作者ArturR2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 00:05:55