使用pdftools读取PDF构建语料库时解析失败的技术求助
解决pdftools批量读取PDF时的解析失败问题
定位问题文件
批量处理时先找出具体出错的PDF,避免整个任务中断:
pdf_files <- list.files(path = "你的目标文件夹路径", pattern = "\\.pdf$", full.names = TRUE) for (file in pdf_files) { tryCatch({ text <- pdf_text(file) cat("读取成功:", file, "\n") }, error = function(e) { cat("读取失败:", file, "错误详情:", e$message, "\n") }) }
针对错误类型修复PDF
这些错误大多是PDF本身的编码、字体或结构损坏导致:
- 连字解析错误:用Adobe Acrobat打开问题PDF,选择「文件→另存为→优化PDF」,或通过虚拟打印机重新打印生成新PDF,修复字体连字的编码问题。
- ICC色彩配置文件错误:在Acrobat的「工具→印刷制作→输出预览」中,移除或替换无效的ICC配置文件后重新保存。
- 共享对象偏移错误:用Acrobat的「工具→印刷制作→PDF修复工具」修复文件结构,或用本地PDF修复工具处理损坏的文件。
更换R包或参数尝试读取
如果不想手动修复PDF,可换用兼容性更好的工具:
- 用
tabulizer包读取(基于Apache PDFBox):
library(tabulizer) text <- extract_text("问题PDF的完整路径")
- 给
pdftools加错误判断,跳过损坏文件:
safe_pdf_text <- function(file) { tryCatch(pdf_text(file), error = function(e) NULL) } corpus <- lapply(pdf_files, safe_pdf_text) # 过滤掉读取失败的空结果 corpus <- Filter(Negate(is.null), corpus)
用命令行工具预处理PDF
先通过pdftotext(poppler工具集,多数系统自带)把PDF转成文本,再读入R:
# 单文件转换 pdftotext "输入PDF路径" "输出文本文件路径" # 批量转换(Linux/macOS) for file in *.pdf; do pdftotext "$file" "${file%.pdf}.txt"; done
然后在R中读取文本:
text_files <- list.files(path = "文本文件夹路径", pattern = "\\.txt$", full.names = TRUE) corpus <- lapply(text_files, readLines, encoding = "UTF-8")
内容的提问来源于stack exchange,提问作者Robson Costa
相关产品推荐
相关产品推荐

