把 PDF 丢给 Claude 让它抽表格,拿到的东西形式上是张表,但列错位一格、本该分开的行合并了、或者数值落到错的表头下面。视觉上看着挺像那么回事,对一下源文件才发现问题。这是 PDF 工作里最常见的失败模式之一,原因是绝大多数 PDF 把表格存成「按坐标摆好的文本块」、没有显式的行列元数据——Claude(其实所有 PDF 工具都一样)只能从坐标推断网格,排版稍有古怪就会推错。源文件和 prompt 两边都有靠谱的绕过办法。
常见原因
按底层成因的命中率从高到低。
1. PDF 把文本存成坐标位置、没有真正的表结构
绝大多数 PDF(尤其是 Word、PowerPoint、扫描件导出的)按 xy 坐标摆文字。没有「第 3 行第 2 列」这种标记。Claude 靠间距推网格,间距不规则就推错。
怎么判断:用 Preview 或 Acrobat 打开 PDF,试着只选中一个单元格。如果一拖就选了整行,说明 PDF 没有表结构。
2. 合并单元格和多行单元格让行检测乱套
跨两行的单元格、或者一个单元格里塞了一段折行文字,行推断就模糊了。Claude 要么把相邻行合并、要么把一行拆成两行。
怎么判断:数源文件的行数和 Claude 输出的行数。差 1 或差 2 就是这个特征。
3. 表头视觉上是表头、结构上没标记
表头那行用加粗显示,人看是表头,PDF 存的方式跟其他数据行一模一样。Claude 可能把表头当数据行处理或者直接丢掉。
怎么判断:看 Claude 输出第一行是列名还是数据。
4. 扫描件 OCR 出错
图片型 PDF 先经过 OCR 再抽取。OCR 错误(1 vs l、0 vs O、小数点 vs 逗号)直接传染到表格里。OCR 排版没对齐也会让列推断挂掉。
怎么判断:PDF 是扫描的还是原生数字的?在文档里搜任意一个词,搜不到说明是扫描件、做过 OCR。
5. 多列页面排版被当成一张大宽表
有些报告用两栏排版。Claude 可能横跨整页读、把无关的列合到一起。
怎么判断:打开 PDF 看页面排版。两栏报纸式排版、中间有空隙,就是这个原因。
6. 数字格式(括号负数、货币符号)
会计 PDF 经常用 (1,234) 表示负数、$1,234.56 表示货币。Claude 可能不一致地剥符号、或者把负数当正数。
怎么判断:抽几个数和源文件对一下。符号错、货币丢,就是这个特征。
开始前
- 想清楚最终需要什么形式:CSV、JSON、Markdown 表、纯文本叙述,prompt 写法不一样。
- 有原始 Excel 或 CSV 就直接用,从 PDF 抽永远有损失。
- prompt 前先用 Acrobat 或 Preview 打开 PDF 看一下结构。
需要收集的信息
- PDF 的页数和表格数。
- PDF 是数字原生还是扫描。
- 列数、行数、有没有合并单元格。
- Claude 输出里正确的行和错误的行各举一例。
- 页面排版(单栏、多栏、横向)。
- PDF 是用什么工具生成的(Word、LaTeX、扫描仪)。
一步一步修复
Step 1:先看 PDF 源结构
Acrobat 或 Preview 打开。试着选中一个单元格。一拖就选整行,那就是没有表结构、抽取要靠坐标推断。先把预期摆正。
Step 2:prompt 里写明表格结构
提前告诉 Claude 表格形态:「第 4 页的表有 5 列:Name、Date、Region、Revenue、Margin。把所有行抽成 CSV,按这个表头顺序。数字可能用括号表示负数,请保留为负数。」明确结构对准确率提升非常大。
Step 3:先抽一行验证
让它:「读第 4 页表格的第 7 行,每个单元格单独一行输出、前面带列名。」强制让 Claude 锚到结构而不是粗扫。
Step 4:复杂表格先用专门工具抽、再让 Claude 清洗
复杂表先用 Tabula、Camelot、AWS Textract 抽一遍。把 CSV 贴给 Claude 让它清列对齐、校验数字格式。比让 Claude 从原始 PDF 抽靠谱得多。
Step 5:多栏页面先拆栏
页面是两栏的话,先转成单栏。Acrobat:Export PDF → Single column layout。或者人工把页面从中间一分为二再丢给 Claude。
Step 6:随机抽 3 行对源验证
挑第 3 行、第 15 行、最后一行。和源 PDF 一格一格比对。错误的规律(每行差一格、表头互换)能指向系统性问题、prompt 里就能修。
Step 7:会计 PDF 在 prompt 里锁死数字格式
加:「(1,234) 当作 -1234,$1,234.56 当作数字 1234.56 和货币 USD。输出两列:amount、currency。」消除数字解析歧义。
怎么验证修好了
- 输出表头和源文件表头一字不差。
- 输出行数和源文件行数对得上。
- 随机三行一格一格比对都对。
- 数字总和(如果有)能和源文件合计对上。
长期预防
- 内部报告 PDF 旁边同步发一份 CSV,下游就能完全跳过抽取。
- 扫描件先用高质量 OCR(Acrobat Pro、ABBYY)跑一遍再丢给 Claude。
- 任何可能被机器读的文档都别用两栏排版。
- 处理财务或科研数据的 Project 加自定义指令:「抽表格之前先把推断出的表头回显一次让用户确认。」
- 重复性流程里搭一个 Tabula 或 Camelot 预抽取步骤,把干净 CSV 喂给 Claude。
容易踩的坑
- 拿到 Claude 抽出来的表不验证就用。错误通常是系统性的、不是随机的。
- 直接问「把表给我」、不指定列。Claude 会自己推、经常推错。
- 把扫描件直接贴进去就指望 OCR 级质量。先单独做一次 OCR。
- 忘了合并单元格和脚注行会把抽取搞乱。
- 不告诉 Claude 怎么解析括号负数,就直接当正数处理。
常见问答
- 为啥列差一格? 一般是表头那个单元格折成两行了,或者第一列异常宽把坐标推断带偏。
- Claude 能读扫描 PDF 吗? 能,内置 OCR。质量看扫描分辨率。关键内容先用专门工具做一次 OCR。
- 抽什么格式最稳? CSV,prompt 里显式写表头。Markdown 表好看但回灌时有损失。
- 模型版本有差吗? 有,新模型处理排版推断明显更好。表格密集的活用最新 Opus 或 Sonnet。
- 跨多页的表要不要拆? 特别宽或特别长的表要拆,每页一条 prompt,Excel 里再拼回去。
- 有硬性大小上限吗? Web 上传单 PDF 软上限约 100 页。超出就拆开。