PDF的页面布局和内部文字顺序可以不同。人眼看到同一行的型号、电压、水箱,提取器可能先输出整列水箱,再输出整列型号。若后续程序只把相邻数字配给相邻型号,就会创造原文从未写过的参数。
本实验的输入与比较边界
建议复现时先看PDF两页,再看纯文本,最后看表格数组,不要先根据期望答案修改提取器输出。检查AX-220和AX-110对应行是否完整,以及第二页Indoor和限制项是否仍对应同一型号。如果人工在表格上做了修正,应保留提取原值、修正值、坐标和原因,不能只交付一份无法看出加工过程的干净JSON。对于扫描件,OCR置信度只能提示复核优先级,不等于参数正确概率;本实验使用数字原生PDF,没有运行扫描件OCR,也没有比较OCR厂商准确率。
合成手册包含两页、两个虚构型号。第一页是供电与水箱,第二页是用途限制。文件由本项目自制,采用合法的按列文字写入顺序,页面上仍是正常表格。它不是客户手册,也不是对所有PDF难例的代表抽样。
实际比较pypdf的普通extract_text输出与pdfplumber的extract_table输出。两者执行的任务不同,因此本文不把“纯文本没有表格结构”算成某个库的总体准确率。这个例子用于说明下游必须知道自己拿到的表示是什么。
实际输出如何暴露风险
纯文本第一页依次出现Tank、20 L、10 L,再出现Model、AX-220、AX-110,最后出现Supply、220 V、110 V。原页面里的行关系需要重新恢复,不能根据这一顺序推断220 V紧邻哪个容量。
| 原始表格对象 | Supply | Tank |
|---|---|---|
| AX-220 | 220 V | 20 L |
| AX-110 | 110 V | 10 L |
document-results.json保留两种原始输出。pdfplumber在这个有清楚网格线的样例中,两页表格都与作者预期数组完全一致。这里只能说“本样例两页通过”,不能写成“表格解析100%准确”。扫描件、无边框表格和合并单元格没有在此得到覆盖。
页码、坐标和表头怎样一起存
输出记录应包含原文件摘要、物理页序、表号、行对象、列标题、值、单位、脚注及坐标。不要只保留转换后的CSV,因为将来发现错误时还需要回看原始位置。遇到跨页表格,下一页的第一行可能是重复表头,也可能是真实数据,必须按版面复核。
| 现象 | 检查动作 | 不允许的自动补全 |
|---|---|---|
| 空单元格 | 判断为空值还是合并单元格 | 一律继承上一行 |
| 脚注星号 | 保留星号与脚注关联 | 只留下数字 |
| 多栏页面 | 分区域恢复阅读顺序 | 整页连续拼接 |
| 扫描文字 | OCR后保留原图与置信信息 | 把识别结果视为原始事实 |
| 重复表头 | 标记表结构延续 | 当作新产品记录 |
建立字段级验收而非字数验收
从原件选取关键字段,逐项记录预期值、提取值、单位、实体、条件和错误类型。单位正确但型号配错,应判失败;数字正确但脚注丢失,应标为条件不完整。普通文字总体识别率高,不能抵消少数高风险参数错误。
可以把错误分成漏提取、错字、跨列、跨行、单位丢失、条件丢失、版本混用。不要用一个百分比掩盖错误性质。验收抽样应优先覆盖合并单元格、页尾跨页和相似型号,而不是只抽最整齐的页面。
什么时候必须升级为人工复核
安全参数、认证、质保与报价条件应在进入事实主表前复核。若两个解析器冲突,也不应简单多数投票;它们可能共享同一OCR错误。人工复核者应能看到原页,而不只是两个文本结果。
pypdf说明解释PDF文字提取与OCR的边界;pdfplumber文档提供表格及坐标接口。本文的运行脚本为media_labs.py,库版本在实验包中锁定。原PDF和两页渲染图均可下载复核。
智核增长的资料入库价值
表格跨页时还需确认第二页是否延续前页列定义,重复表头是否被误当数据行,以及脚注是否作用于全部型号。本示例两页分别含完整表头,未测试复杂跨页合并;不能将它的成功结果扩展为对任意扫描手册的可靠性保证。
对智核增长服务的出海企业,资料治理不是把PDF批量转文字就结束,而是确保产品型号、单位与使用条件没有在转换中被重新组合。客户可以要求抽查几条高风险参数的原页、提取字段和最终中英文网页,验证同一事实是否贯通。
下一步是单位及条件核验、证据定位和事实主表映射。短答见技术FAQ,完整原件与输出见进阶实验包。这类检查减少入库错误,但不等同于外部AI引用率提升。