快速答案
Quick Answer
多行项目证书提取需要解析器检测表格边界、跨行关联列标题与值、将多个炉或行项分割为不同的记录,以及处理表格中间的分页符——这些挑战击败了简单的OCR管道,但可以通过视觉语言模型和表格感知的提取模式解决。
单一炉的磨机测试证书是最简单的提取情况:一组化学值、一组机械测试结果、一个炉号。真实的文档流很少这么干净。钢铁服务中心发行涵盖数十个炉的综合证书。板材磨机在单一炉中制表多个测试位置。管道制造商在并排列中包含体和焊接化学。
多行项目提取是简单解析器失败而强大提取架构证明其价值的地方。
多行项目文档的类型
理解故障模式需要区分文档结构:
类型1:多炉综合证书 一个PDF涵盖多个炉号,每个炉号都有自己的化学和机械测试数据。常见于钢铁服务中心和经销商,他们以综合格式重新签发供应商MTC。典型结构:一个表格,其中每一行是一个单独的炉。
类型2:多试样机械测试表 单一炉具有多个测试试样结果(例如,来自板上五个位置的-20°C下的Charpy冲击测试)。炉数据是单一的;只有机械测试表具有多行。
类型3:多元素化学表与注释 标准化学表加上补充元素(硼、氮、残留物)在同一页面或以下页面上的辅助表中。两个表都属于同一炉。
类型4:多炉、多页证书 一个综合证书,其中表格跨越多页,列标题行仅出现在第一页上。
类型5:行项采购单对账证书 一个证书,涵盖多个PO行项,每个具有不同的材料等级、尺寸及其相关的炉参考。在EPC项目文档包中很常见。
这些结构中的每一个都需要不同的提取策略。
为什么OCR管道在多行表中失败
传统的OCR过程将页面处理为按阅读顺序的字符流。对于一个跨8行炉的12种元素的化学表,OCR返回如下内容:
C Mn Si P S Cr Mo Ni
0.18 1.42 0.28 0.012 0.008 0.02 0.01 0.08
0.21 1.38 0.31 0.015 0.010 0.02 0.01 0.09
...
标题行被保留,值按顺序出现。但后处理管道现在必须:
- 识别哪一行是标题
- 将每个数据行中的每个值与其列标题关联
- 检测识别每一行的炉号
- 处理炉号位于单独的前列或合并单元格中的情况
此列关联逻辑在以下情况下中断:
- 具有合并标题单元格(跨越多列)的表
- 具有分层标题(主组+子元素)的表
- 列宽差异很大的表
- 具有空白单元格的表(未对该元素进行测试)
- 在单元格中嵌入脚注引用的表
视觉语言模型如何处理表格结构
VLM将页面处理为图像并在视觉上理解表格结构。它看到列标题跨越某些宽度,其下的值属于这些列,无论读取顺序中的字符序列如何。该模型可以:
- 识别合并的标题单元格并将标题应用于所有子列
- 将空白单元格检测为显式"未测试"而不是错误读取的值
- 识别分层标题(例如,"化学%",带有每个元素的副标题)
- 将最左列中的炉号与每一行值关联
对于多页表,模型需要显式处理分页情况:第1页的列标题必须传播到第2页上不显示列标题的数据行。这需要按顺序而不是独立处理页面的文档级上下文。
分割:从表格到记录
表格提取后,系统必须将表格分割为单个记录——每个炉或行项一个。此分割步骤在逻辑上与字段提取步骤分离,并需要其自己的逻辑:
基于行的分割:表中的每一行都是一条记录。第一列中的炉号是主键。这是多炉综合证书的常见情况。
基于组的分割:多行属于同一炉(多个试样结果)。系统必须检测组边界——通常是合并单元格或重复的炉号——并将行聚合为单个炉记录,其中嵌套数组用于多试样数据。
交叉引用分割:行项引用在文档其他地方出现的炉号(例如,包装清单表引用在单独的化学部分中制表的炉号)。提取需要在文档中交叉引用以构建完整的记录。
TestCert等平台通过模式驱动的提取管道处理所有三种分割模式,其中适用的分割模式根据摄取时的文档分类选择。
处理多页表中的分页符
多页表情况对于大型项目文档包很常见。正确的方法:
- 检测第1页上的表,包括列标题及其位置
- 检测表继续(通常通过"继续"标签、匹配的列结构或缺少闭合边框)
- 存储第1页的列标题映射
- 将该映射应用于后续页面上的数据行
- 在分割成记录之前重建完整表
独立处理页面的提取器——常见的成本相关设计——在这种情况下以无声方式失败。它们正确提取第1页,并为继续页生成不完整或格式不正确的记录。
多行提取后的验证
每个提取的行项记录必须独立验证:
- 化学总和检查是否通过?(碳+锰+硅+...对于指定的等级应该是合理的)
- 机械值是否在指定标准的限制范围内?
- 是否存在炉号且在批次内唯一?
- 是否填充了必需字段?(某些多炉表为简洁起见省略重复值;缺失值应被标记,不应被静默接受为零)
在记录级别而非文档级别的验证防止一个有效的炉掩盖同一证书上其他炉中的问题。
常见问题
证书提取器可以可靠地处理的最大行项数是多少?
没有固定的最大值,但精度随着非常大的表(50+行)而趋于下降,因为累积布局推断错误。对于非常大的综合证书,在提取前按页面或部分拆分文档并在之后合并结果会提高可靠性。实际上,大多数生产MTC每个文档有1–20个炉。
系统应该如何处理某些元素缺少化学的行项?
空白单元格应记录为null(未测试),而不是零。碳值为零在化学上是无意义的;null表示该元素不是规范要求的或未被测试。当记录用于标准验证时,区别很重要——null不应触发"低于最小值"失败。
提取能处理每个炉有不同适用等级的证书吗?
是的,如果提取模式支持每行标准/等级字段。某些综合证书为所有炉指定单一等级(更简单);其他证书列出每个炉的不同等级(更复杂)。提取器应检测应用的模式并相应映射。下游验证随后必须根据其自己的指定等级而不是文档级等级检查每个炉。
当表标题行在表中间重复时会发生什么(如某些工具为分页插入的)?
重复的标题行是已知的PDF工件。强大的提取器检测并忽略数据体中的重复标题行,而不是将其视为数据行。与列标题模式完全匹配的行内容应分类为标题并排除在数据提取之外。
我如何处理某些炉有补充测试数据而其他没有的证书?
提取模式应将补充测试字段定义为可选。有补充数据的炉填充这些字段;没有的炉保留null。审核者界面应使补充数据的存在或不存在可见,以便审核者可以确认缺失的补充数据反映实际文档内容而不是提取遗漏。
Ready to automate your certificate workflow?
Try TestCert free