Rstudio中使用pdftools提取PDF文本仅能获取前3页的问题咨询
问题原因
- pdftools默认的文本提取逻辑适配流式普通文本排版,表格页的文本按单元格拆分、坐标分散,不符合默认的流式布局判定规则,会被判定为非可读内容直接跳过
- 部分表格页的文本使用自定义嵌入字体子集、或被标记为表单/图像附属内容,pdftools默认未启用非标准文本元素的扫描逻辑,因此返回空内容
- 旧版本pdftools存在未指定pages参数时默认仅提取前3-5页的兼容问题,可先排查版本是否为最新版
解决方法
调整原生提取参数
强制指定全页面范围,开启非标准文本扫描规则,示例代码如下:
library(pdftools) # 传入全页面范围,开启布局解析、不可见文本提取权限 full_pdf_text <- pdf_text( "target.pdf", pages = 1:30, control = list( text_encoding = "UTF-8", extract_invisible_text = TRUE, ignore_layout = FALSE ) )
执行后先检查返回列表的长度,如果长度为30但后27项为空,再使用下方OCR提取方案。
OCR识别扫描类/特殊排版页面
如果表格内容被转为图像路径、或文本加密无法直接提取,配合tesseract做OCR全页面识别:
library(pdftools) library(tesseract) # 按300dpi渲染所有页面为图像 page_imgs <- pdf_render_page("target.pdf", pages = 1:30, dpi = 300) # 逐页OCR提取文本,可按需调整识别语言包 full_pdf_text <- lapply(page_imgs, function(img) { ocr(img, engine = tesseract(c("eng", "chi_sim"))) })
表格专项提取
如果需要保留表格的结构化格式,搭配tabulizer库提取所有页面的表格内容,再和pdftools提取的普通文本结果做拼接即可。
内容的提问来源于stack exchange,提问作者Balasubrahmanyam Ira
相关产品推荐
相关产品推荐

