把 PDF 抽成文字交给 AI 前,先查哪些页需要回看

KevinW Lv.2 2026/10/22 16:48:51 浏览 2

这页 PDF 里有个很显眼的 VALUE = 742,但用纯文字抽取后,得到的只有上面那行标题:

MIXED PAGE: extractable heading

这是本地构造的教学样例第 4 页的局部渲染。标题是 PDF 文字,下面整块是内嵌 PNG;本次没有做 OCR。如果先抽文字再让 AI 总结,图片里的那句内容在传给模型之前就已经漏掉了。

可以先逐页看一下:抽到了多少文字,有多少图片出现记录,文字预览是不是只剩标题。这里做了一个只读本地 PDF 的小脚本,不上传文件、不调用模型。

单独下载完整 pdf_check.py

下载五页PDF、检查脚本、重建器和验证材料包

五页对照

附件的 demo.pdf 有五页,都是脚本构造的材料,不是真实业务文件。实际运行结果是:

页码页面内容文字字符数图片出现记录数
1普通 PDF 文字1180
2只有内嵌图片,文字在图片里01
3真正空白00
4文字标题加图片内容311
5彩色矢量几何图00

第 4 页说明“抽到文字”还不能说明内容完整。第 3、5 页则是另一组对照:计数完全相同,第 5 页却看得见图形。所以脚本只给 text_found 或 no_extracted_text,不自动贴“扫描件”“空白页”的标签。

解压后跑一下

需要 Python 3.10+。本地实际验证版本是 Python 3.12.14、PyMuPDF 1.26.6、Pillow 12.3.0;依赖已经写进包里的 requirements.txt。在解压目录的 Bash 中运行:

python -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt
python pdf_check.py demo.pdf
python verify.py

安装依赖需要能取得相应软件包;之后检查过程可离线运行。主检查脚本用 PyMuPDF,Pillow 用于重建教学图片。

前一条检查命令会输出 5 行 JSON,第 4 行应是:

{"page": 4, "text_chars": 31, "image_occurrences": 1, "text_preview": "MIXED PAGE: extractable heading", "hint": "text_found"}

换成自己的文件时,把 demo.pdf 换成对应路径即可。text_chars 是去掉首尾空白后的字符数,不是 token;text_preview 是折叠空白后的前 100 个字符。

最终 ZIP 已实际解压重跑:五页特征符合预期,图片里的 VALUE = 742 不在抽取结果中。损坏样例、非 PDF、不存在和需要密码的输入均非零退出,没有输出半份 JSON 结果。库可能修复部分结构异常,这个工具也不是完整的 PDF 损坏检测器。

怎么用这些结果

先打开 no_extracted_text 对应的原页,看它是空白、图片还是矢量内容。再看有文字又有图片的页,确认预览是不是只抽到了标题、图注或页眉;任务依赖图表时,要回到页面核对。计数只能帮你找复查线索,文字顺序、字体编码和复杂排版仍可能影响抽取。

图片这一列用的是 len(page.get_image_info()),同一张图摆放多次会重复计数,检测也不局限于可见裁切区。它不是唯一图片文件数,也不能覆盖矢量图形,不能拿它证明页面完整。

最后要分清输入路径:上面检查的是本地先抽成纯文字,再交给 AI的流程。OpenAI 当前文档说明,Responses 中支持视觉的模型处理 PDF 文件输入时,会接收提取文字和页面图像;其他产品、端点也应看各自的支持情况,不能据此说所有 AI 都读不到图片页。

来源:PyMuPDF《Page》文档、OpenAI《File inputs》,2026-10-22 核对当前文档。

评论 0

发表评论

登录后参与讨论

登录

暂无评论