Claude 读 PDF 表格抽错列、合错行

让 Claude 抽 PDF 表格,结果列错位、行合并、数值落到错的表头下。这里给出最快的修法,外加按成因逐条修源文件和 prompt。

把 PDF 丢给 Claude 让它抽表格,拿到的东西形式上是张表,但列错位一格、本该分开的行合并了、或者数值落到错的表头下面。看着挺像那么回事,对一下源文件才发现问题。

最快的修法: 提前把准确的列名和顺序告诉 Claude,让它输出 CSV,再验三行。一条这样的 prompt 就能在重试第一次时修掉绝大多数「列错位」的情况,因为你把 Claude 原本要去猜的网格直接抹掉了:

The table on page 4 has 5 columns in this order: Name, Date, Region, Revenue, Margin. Output every row as CSV with that header. Negatives may appear as (1,234) — keep them negative.

这是 PDF 工作里最常见的失败之一,因为绝大多数 PDF 把表格存成「按坐标摆好的文本块」、没有任何行列元数据。先搞清楚底层到底怎么回事,修法会很不一样:截至 2026 年 6 月,你发一份 PDF 给 Claude 时,它会把每一页转成图片、同时抽取文本层,然后把两者放在一起推理(见 Anthropic 的 PDF support 文档)。所以它既不是纯 OCR、也不是纯坐标解析——是「视觉 + 文本」一起上。这点很关键:如果视觉层质量差(低分辨率扫描、字太小、某页被转了 90 度),或者文本层是一堆没网格的坐标块,Claude 重建出来的表就会漂。把更弱的那一层修好,准确率通常立刻上去。

先判断你是哪一类

动手改之前先花 20 秒做这个分诊。用 Preview(macOS)或 Acrobat 打开 PDF,照下面对一对。

你看到的现象最可能的成因跳到
选「一个单元格」一拖就选了整行没有表结构,靠坐标推断成因 1、Step 2
输出行数比源差 1 或差 2合并 / 多行单元格成因 2、Step 3
表头被当数据行,或者直接丢了表头有样式没标记成因 3、Step 2
在文件里搜不到任何文字扫描图片,做过 OCR成因 4、Step 4
两栏报纸排版被读成一张大宽表多栏页面排版成因 5、Step 5
负数变正、货币消失会计数字格式成因 6、Step 7
整体大致对但发虚PDF 太密太大撑爆上下文成因 7、Step 6

常见原因

按底层成因的命中率从高到低。

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 没有文本层,Claude 几乎全靠页面图片。OCR 那类错误(1 vs l、0 vs O、小数点 vs 逗号)和排版没对齐会直接传染到表格里。

怎么判断:在文档里搜任意一个词(Cmd/Ctrl+F)。搜不到说明是扫描件、没有真正的文本层。

5. 多列页面排版被当成一张大宽表

有些报告用两栏排版。Claude 可能横跨整页读、把无关的列合到一起。

怎么判断:看页面。两栏报纸式排版、中间有分栏空隙,就是这个原因。

6. 数字格式(括号负数、货币符号)

会计 PDF 经常用 (1,234) 表示负数、$1,234.56 表示货币。Claude 可能不一致地剥符号、或者把括号负数读成正数。

怎么判断:抽几个数和源文件对一下。符号错、货币丢,就是这个特征。

7. PDF 太密或太大,没到页数上限就撑爆了上下文

Anthropic 文档明确提到:密集的 PDF(很多小字号页、复杂表格、大量图形)可能没到页数上限就把上下文窗口填满,大文件即便走 Files API 也可能失败。一旦这样,靠后的页就被「读糊」了,那些页上的表格也跟着漂。

怎么判断:是只在靠后的页、或只在最密的页上准确率掉下来吗?那是这个成因,而不是表格本身的问题。

开始前

  • 想清楚最终要什么形式:CSV、JSON、Markdown 表、纯文本叙述,prompt 写法都不一样。要回灌进表格,CSV + 显式表头最稳。
  • 有原始 Excel 或 CSV 就直接用,从 PDF 抽永远有损失。
  • prompt 之前先用 Acrobat 或 Preview 打开 PDF 看结构。
  • 收集这些信息:页数和表格数、数字原生还是扫描、列数行数、有没有合并单元格、页面排版(单栏/多栏、横向),以及 Claude 输出里正确的一行和错误的一行各举一例。

一步一步修复

Step 1:先看 PDF 源结构

Acrobat 或 Preview 打开,试着选中一个单元格。一拖就选整行,那就是没有表结构、抽取要靠坐标加图片推断。先把预期摆正,也好判断是该修文件(Step 4-5)还是只修 prompt(Step 2-3)。

Step 2:prompt 里写明表格结构

提前把表格形态说清楚:The table on page 4 has 5 columns in this order: Name, Date, Region, Revenue, Margin. Extract all rows as CSV with that exact header. Numbers may use parentheses for negatives — preserve them as negative. 把列名和顺序点明,就抹掉了导致列错位的「猜网格」环节。Anthropic 自己的建议是:引用页码时用 PDF 阅读器里显示的逻辑页码,这样 Claude 能锚到正确的那一页。

Step 3:先抽一行做验证探针

让它:Read row 7 of the table on page 4 and output each cell on its own line, prefixed by its column name. 强制 Claude 锚到结构、而不是粗扫,同时能暴露出错位是从哪一格开始的,你据此修正表头列表、再跑整表抽取。

Step 4:扫描件先 OCR;复杂表先用工具抽再让 Claude 清洗

如果是扫描件,先跑一遍高质量 OCR(Acrobat Pro 的 “Recognize Text”,或 ABBYY FineReader),让真正的文本层在 Claude 看到之前就存在。带边框和合并的复杂表,先用专门工具抽出来,再把 CSV 贴给 Claude 让它修对齐和数字格式。这比让 Claude 从原始 PDF 直接抽靠谱得多。

Camelot(Python、免费)是截至 2026 年 6 月最常用的主力:单元格之间有可见框线的表用 flavor="lattice",靠空白分隔的表用 flavor="stream",拿不准就用 flavor="auto" 让它自己选。Tabula 和 AWS Textract 是备选;嘈杂扫描件想要托管式的 OCR 加表格模型,Textract 值得一试。

Step 5:多栏页面先拆栏再发

页面是两栏的话,先转成单栏,免得 Claude 横跨分栏空隙去读。Acrobat 里把页面导成可重排格式(或用拆分/裁剪工具),让每一栏成为独立的块再发。一次性处理零散页面时,把页面从中间裁成两半、各半单独发,也管用。

Step 6:又密又长的 PDF:拆开 + 用大上下文模型

如果是靠后的页或更密的页准确率往下掉,把文档拆成几段、每段一条 prompt 抽,然后在 Excel 里拼回去。表格密集的活用最新的大上下文模型——截至 2026 年 6 月,Claude Opus 4.7 和 Sonnet 4.6 都是 1M token 上下文,能在「读糊」之前装下多得多的密集页。API 上单次请求最多 600 页、32 MB 总量(老的 200k 上下文档位是 100 页);Web 端遇到特别大的 PDF,最好上传前先拆开。

Step 7:会计 PDF 在 prompt 里锁死数字格式

加:Treat (1,234) as -1234. Treat $1,234.56 as the number 1234.56 with currency USD. Output two columns: amount, currency. 消除数字解析歧义、堵住符号翻转。

怎么确认修好了

  • 输出表头和源文件表头一字不差、顺序也对。
  • 输出行数等于源文件行数(差一格的问题没了)。
  • 随机抽三行(比如第 3 行、第 15 行、最后一行)一格一格比对都对得上。
  • 数字总和(如果有)能和源文件合计对上,负数也保住了符号。

这里的错误几乎都是系统性的、不是随机的——只要有一项不过,同一个缺陷通常会重复出现,修一下表头列表或数字规则,整张表就一起好了。

长期预防

  • 内部报告 PDF 旁边同步发一份 CSV,下游就能完全跳过抽取。
  • 扫描件先用高质量 OCR(Acrobat Pro、ABBYY)跑一遍再丢给 Claude。
  • 任何可能被机器读的文档都别用两栏排版。
  • 处理财务或科研数据的 Claude Project 加一条自定义指令:When extracting tables, first echo the assumed header row for user confirmation, then output the data.
  • 重复性流程里搭一个 Camelot 或 Tabula 预抽取步骤,把干净 CSV 喂给 Claude。
  • 如果 Claude 似乎完全无视图表和表格的视觉内容,去 Settings → Feature Preview 确认视觉 PDF 处理是开着的——老账号里有个 “Visual PDFs” 开关,它控制着图片层。

容易踩的坑

  • 拿到 Claude 抽出来的表不验证就用。错误是系统性的,对几下就能抓出来。
  • 直接问「把表给我」、不指定列。Claude 会自己推网格、经常推错。
  • 把扫描件直接贴进去、没有真正的文本层还指望干净结果。先做 OCR。
  • 忘了合并单元格和脚注行会把行检测搞乱。
  • 不告诉 Claude 怎么解析括号负数,就直接当正数处理。

常见问答

  • 为啥列正好差一格? 一般是表头那个单元格折成两行了,或者第一列异常宽把网格推断带偏。在 prompt 里把表头点明(Step 2)就能修。
  • Claude 能读扫描 PDF 吗? 能——它把每页当图片、再加上抽出来的文本一起分析。质量看扫描分辨率。关键内容先单独跑一遍 OCR,让真正的文本层存在。
  • 抽什么格式最稳? CSV,prompt 里把表头显式写出来。Markdown 表好看,但回灌进表格时损失更大。
  • 模型版本有差吗? 有。新模型处理排版推断明显更好;表格密集和长文档用最新的 Claude Opus 4.7 或 Sonnet 4.6(截至 2026 年 6 月为 1M token 上下文)。
  • 宽表或长表要不要拆到多条 prompt? 要——按页或按段抽,再在 Excel 里拼回去,避免密集页上的上下文劣化。
  • 大小上限是多少? API 上单次请求最多 600 页、32 MB 总量(老的 200k 上下文模型是 100 页)。Web/App 上传遇到特别大的 PDF,先拆开再传。

相关

标签: #Claude #排查 #PDF