ChatGPT 不是”看”PDF 的——它读的是 PDF 解析器抽取出来的文本。扫描页没文本层、多栏排版抽取顺序乱、表格被压扁成 prose、嵌入字体编码异常、整页是位图——所有这些都让抽取层把”原文”变成了模型看到的”噪声文本”。模型基于这份坏文本做总结,结果当然错。绝大多数 PDF 分析错都不是模型笨,是 PDF 在抽取层就坏了。修法是先验证抽取质量,再处理模型。
常见原因
按命中率从高到低:
1. 扫描页没文本层
最常见。来自手机拍照、纸质文件扫描的 PDF 看起来正常,实际每页是一张大图,没有任何”文本”可以被抽取。模型只看到 “[image]” 和空白,回”该页没有内容”。
如何判断:阅读器(Preview / Adobe)里逐页试鼠标拖选文字。选不中 = 没文本层 = 扫描页。
2. 多栏 / 复杂排版抽取顺序错
学术论文 / 杂志双栏 PDF,抽取器经常按 z-order(左到右、上到下)扫,把左栏第一段拼上右栏第一段——句子被打乱。
如何判断:让它”原文引第 3 页第 1 段”,引出来的内容句子拼接奇怪 / 主谓不连贯 = 抽取顺序错。
3. 表格被压扁丢行列
PDF 的表格只是绘制的线条 + 文本框,抽取器把行列结构丢了,输出变成一串没结构的数字。“Q1 营收 100, Q2 200” 可能被抽成 “Q1 营收 Q2 100 200”。
如何判断:表格相关问题答错 / 数字对错位 = 这条。让它”逐行抽取 Table 2 的所有行”输出结构混乱 = 验证。
4. 嵌入字体 / 非标 CID 抽出乱码
中文 PDF / 数学公式 / 特殊字体经常用 embedded subset font + 非标 CID 映射。抽取出来变 ”���” 或者英文字母替代汉字。
如何判断:让它原文引一段,输出明显乱码 / 字符替换 = 字体问题。
5. 巨型 PDF 触发”略读”模式
> 50MB / > 500 页的 PDF 可能触发不同抽取路径,只读头几页 + 元数据,深度内容缺失。
如何判断:让它”列出每章页数”对照实际 TOC,明显缺尾几章 = 触发了大文件路径。
6. 加密 / 受保护 PDF 抽不出来
带 password 或 DRM 的 PDF 上传后能看到文件但抽取失败。模型答”无法访问此文件内容”。
如何判断:本地用 qpdf --is-encrypted 检查 = 加密。
7. 图片 / 图表内容完全被忽略
PDF 里的图片 / 图表 / 流程图,抽取层只看到 “[image]” 占位符。所以模型当然不引用图表内容。
如何判断:明明图表里有数字,回答完全没提 = 抽取层没读图。
动手前先确认
- 确认问题是在 Projects、Custom GPT 还是普通对话里出现;三者 PDF 处理略有差异。
- 复现前把当前对话复制一份,避免清掉历史影响下次诊断。
- 确认订阅:Free / Plus / Team / Enterprise 在单文件大小上限不同。
需要收集的信息
- PDF 类型(数字原生 / 扫描 / 混合)、总页数、文件大小(MB)。
- 是否含中文 / 数学公式 / 表格 / 图表 / 双栏排版。
- 完整 prompt 文案 + 错误回答截图;具体哪几页 / 哪个表 / 哪个数字错。
- 当前模型 + 上传方式(对话 / Project / Custom GPT)。
最短修复路径
按收益从高到低,前 2 步通常修 70% 问题。
Step 1:逐页验证文本可选中
在本地 PDF 阅读器(macOS Preview / Adobe / 浏览器)打开:
- 翻到内容错的那几页
- 尝试鼠标拖选文字
- 能选中 = 有文本层;不能 = 扫描页 / 位图
或者命令行批量检查:
# 提取文本,看每页字数
pdftotext -layout your.pdf - | wc -l
# 或者用 Python
pip install pdfplumber
python -c "import pdfplumber; pdf = pdfplumber.open('your.pdf'); print([len(p.extract_text() or '') for p in pdf.pages])"
输出页字符数都是 0 / 个位 = 扫描或抽取坏。
Step 2:扫描页跑 OCR
# 安装 ocrmypdf(基于 Tesseract)
brew install ocrmypdf # macOS
apt install ocrmypdf # Ubuntu
# OCR(中英文)
ocrmypdf input.pdf output.pdf --language eng+chi_sim
# 跳过已有文本层、强制重做
ocrmypdf input.pdf output.pdf --force-ocr --language eng+chi_sim
输出的 PDF 上传 ChatGPT,“看不到内容”问题立刻消失。
Step 3:高质量结构化抽取转 Markdown
复杂表格 / 公式 / 多栏排版用专门工具:
# Marker(CPU / GPU 都可)— 抽取质量比 ChatGPT 内置好得多
pip install marker-pdf
marker_single input.pdf ./output --max_pages 300
# 输出 output/input/input.md(带表格、公式、章节)
# 或者 Docling(IBM)
pip install docling
docling input.pdf --output md > output.md
把生成的 Markdown 上传 ChatGPT,比传原 PDF 检索质量 + 表格准确度都飞跃。
Step 4:表格单独显式抽取
直接给 ChatGPT 的 prompt:
The document contains a table on page 12. Extract that table:
- Quote the exact title / caption
- Quote every column header in order
- Quote each data row verbatim, row by row
- Format as Markdown table
强制结构化抽取 → 模型不能再”压扁成 prose”。
Step 5:巨型 PDF 切成 30-50 页一段
# 按页数固定切
qpdf --split-pages=30 large.pdf part-%d.pdf
# 按章节切(如果有书签)
pdftk full.pdf cat 1-46 output ch1.pdf
pdftk full.pdf cat 47-92 output ch2.pdf
每段独立上传 + 独立查询,绕开大文件略读路径。
Step 6:加密 PDF 先解密
# 你有密码
qpdf --decrypt --password=YOURPASSWORD encrypted.pdf decrypted.pdf
# 你只有 PDF 但忘了密码:不在本文范围
decrypted.pdf 再上传。
Step 7:含关键图表的页转图给 vision 看
抽取层抽不出图表 → 把那几页转 PNG / JPG 上传给 vision 读:
# pdftoppm(PDF → 图)
pdftoppm -r 200 -png mypdf.pdf page
# 输出 page-1.png, page-2.png, ...
把关键页的图传给 ChatGPT,让 vision 直接读图。比让它读坏抽取强。
怎么确认已经修好
- 开新对话上传 OCR / Markdown 后的版本,问同一题,引用的原文 + 页码能在 PDF 里 Ctrl+F 找到 = 真修好。
- 让它原文引第 50 页一句话,对比原始 PDF 那一句字一字对得上 = 抽取无损。
- 让同事用相同 OCR / 转换流程跑一份再上传,结果一致 = 流程稳定。
如果还是没修好
- 把 PDF 切到最小:保留出问题那 1-3 页,转 Markdown 上传,看深度能不能拉起来。
- 换抽取工具:Marker → Docling → Adobe Acrobat 各跑一份对比输出。
- 换平台:高 stakes PDF 分析可以试 Claude Projects、Gemini Workspace、专用 RAG 工具(NotebookLM)。
- 准备好原 PDF + 抽取后的 Markdown + 错误回答截图 + 期望内容,去 help.openai.com 提工单。
预防建议
- 上传前永远做一次健全检查:让 ChatGPT “原文引第 3 页一句话”。引不出就先修抽取。
- 优先用数字原生 PDF(直接从 Word / LaTeX / Pages 导出),少用”打印—扫描”链路。
- 高 stakes 分析(财务、合规、合同)一律本地先转 Markdown 再上传,不要直接上传 PDF。
- 表格 / 数字密集的页提前转 CSV / Markdown,分析准确度跨数量级提升。
- 200 页只读一章 → 提前本地切出那一章,不要全传。
相关阅读
标签: #ChatGPT #ChatGPT 文件 #排查 #排查 #PDF 分析