如何在R中批量提取多PDF指定信息并整合结果?
批量处理PDF提取信息的解决方案
我来帮你把单个PDF的提取逻辑封装成可复用的函数,再批量处理所有off_开头的数据框,最后把结果整合到一个统一的数据框里,具体实现如下:
步骤1:封装单个数据框的提取函数
把你之前的单文件提取逻辑打包成函数,这样可以重复调用,同时自动关联对应账号:
extract_pdf_info <- function(df, df_name) { # 从数据框名称中提取账号(匹配开头的数字部分) acc_num <- str_extract(df_name, "^off_(\\d+)") %>% str_remove("^off_") # 定义提取所需信息的正则表达式 protec_per_reg <- "Protected\\sP\\w+\\sof" Arr_Fee_reg <- "^The\\sArrangement\\sF\\w+" Fix_inter_reg <- "Fixed\\sI\\w+\\sR\\w+" Bench_rate_reg <- "Benchmark\\sR\\w+\\sthat" # 筛选第3页中匹配任意正则的行 filtered_df <- df %>% filter(page_id == 3, str_detect(text, protec_per_reg) | str_detect(text, Arr_Fee_reg) | str_detect(text, Fix_inter_reg) | str_detect(text, Bench_rate_reg)) # 提取数值(支持小数) extracted_nums <- str_extract(filtered_df$text, "\\d+\\.?\\d+") # 处理NA值:替换为带%的数值(针对保护比例这类带百分号的字段) na_indices <- is.na(extracted_nums) if (any(na_indices)) { extracted_nums[na_indices] <- str_extract(filtered_df$text[na_indices], "\\d+%") } # 整理成结构化的行数据,明确字段名 result <- tibble( Account_Number = acc_num, Protected_Percentage = extracted_nums[1], Arrangement_Fee = extracted_nums[2], Fixed_Interest_Rate = extracted_nums[3], Benchmark_Rate = extracted_nums[4] ) return(result) }
步骤2:批量处理所有off_开头的数据框
自动识别环境中所有off_开头的数据框,逐个调用提取函数,最后合并成汇总数据框:
# 获取所有以off_开头的数据框名称 off_df_names <- ls(pattern = "^off_") # 初始化列表存储每个数据框的提取结果 all_results <- list() # 遍历处理每个数据框 for (df_name in off_df_names) { current_df <- get(df_name) current_result <- extract_pdf_info(current_df, df_name) all_results[[df_name]] <- current_result } # 合并所有结果为一个汇总数据框 final_summary_df <- bind_rows(all_results) # 查看最终整合后的结果 print(final_summary_df)
额外优化说明
- 给提取的字段加上了明确的名称,避免后续混淆各项信息;
- 账号提取逻辑适配了你命名数据框的规则(
off_+文件名),自动匹配对应PDF的账号; - NA值处理更精准,只针对有缺失的位置替换,避免不必要的操作;
- 如果你的PDF存在匹配行顺序不一致的情况,可以在筛选后增加排序逻辑(比如按正则匹配的优先级排序),确保数值对应正确的字段。
内容的提问来源于stack exchange,提问作者SAJ
相关产品推荐
相关产品推荐

