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

使用R语言Magick批量读取PDF的循环问题及OCR脚本开发

解决PDF批量OCR与文本处理的后续步骤

看起来你已经搞定了PDF文件路径批量获取和页码统计的核心环节,接下来咱们一步步把OCR识别和后续文本处理的流程补全~

先梳理下你现有代码的作用

你这段代码已经完成了两个关键动作:

  • 用list.files()抓取了指定路径下所有PDF的完整路径,存到AllReports列表中
  • 通过pdf_info()获取每个PDF的元信息,再用lapply()提取出了每个PDF的页码数,存在ReportDensity里

后续完整流程实现

首先确保你安装了所需的R包,然后按步骤处理:

1. 安装并加载依赖包

# 首次使用先安装包
install.packages(c("pdftools", "tesseract", "magick"))

# 加载包
library(pdftools)
library(tesseract)
library(magick)

提示:如果需要识别中文等非英文内容,要先下载对应语言包,比如tesseract_download("chi_sim")

2. 批量执行OCR识别

我们可以嵌套循环遍历每个PDF的每一页,转成图像后用tesseract识别文本:

# 初始化列表存储所有提取的文本
ExtractedTexts <- list()

# 遍历每个PDF文件
for (report_idx in seq_along(AllReports)) {
  current_pdf_path <- AllReports[report_idx]
  total_pages <- ReportDensity[[report_idx]]
  
  # 存储当前PDF每一页的文本
  page_texts <- vector("character", length = total_pages)
  
  # 遍历当前PDF的每一页
  for (page_num in 1:total_pages) {
    # 将PDF页面转换为图像(magick包处理)
    page_img <- image_read_pdf(current_pdf_path, pages = page_num)
    
    # 执行OCR,默认英文;如需其他语言,添加lang参数,比如ocr(page_img, lang = "chi_sim")
    page_texts[page_num] <- ocr(page_img)
  }
  
  # 将当前PDF所有页面的文本合并,存入总列表
  ExtractedTexts[[report_idx]] <- paste(page_texts, collapse = "\n\n")
}

# 给列表命名为PDF文件名,方便后续查找
names(ExtractedTexts) <- basename(AllReports)

3. 后续文本处理示例

拿到识别后的文本后,你可以根据需求做清洗、提取等操作:

# 示例1:清理文本中的多余空格和换行
cleaned_texts <- lapply(ExtractedTexts, function(text) {
  # 替换多个空白为单个空格,再去除首尾空白
  gsub("\\s+", " ", text) |> trimws()
})

# 示例2:提取包含特定关键词的句子(比如你提到的"Density")
library(stringr)
density_content <- lapply(cleaned_texts, function(text) {
  str_extract_all(text, ".*Density.*\\.")[[1]]
})

一些实用提示

  • 如果你的PDF是可复制的电子文本,不需要OCR,直接用pdf_text(current_pdf_path)读取即可,速度会快很多
  • 扫描版PDF如果清晰度差,可以用magick的image_trim()(去除边缘空白)、image_threshold()(增强对比度)等函数预处理图像,提升OCR准确率
  • 可以用purrr包的函数替代循环,让代码更简洁,比如map2()同时遍历PDF路径和页码数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:09:49