304不锈钢质保书批量识别

SKILL效率
效率 未标注权限 许可证不明确
安装这个技能

批量识别304不锈钢质保书(材质证明书/质量证明书),支持用户上传的单个文件或指定的本地文件夹(单次最多100份),输出结构化Excel(每钢卷一行,卷号独立成列,一证多卷自动拆行)或按钢厂/产品/日期维度归类文件。使用RapidOCR本地引擎,无需API密钥。当用户上传或提及不锈钢质保书、材质证明书、质量证明书、inspection certificate、mill test certificate、MTC,要求批量提取钢材证书的化学成分和力学性能,或要求把质保书汇总成Excel/归类整理时使用此技能。

一句话选型结论

按资料字段整理

304不锈钢质保书批量识别是效率类的 Agent Skill,安装方式未标注,权限级别未标注,许可证不明确,有可直接复制的安装命令。技能本质是给模型读的说明书,效果取决于模型与客户端;装完先用一个小任务验证,再放进正式流程。

分类效率 安装方式未标注 权限级别未标注权限 许可证许可证不明确
累计安装 未标注 本周 未标注
GitHub 星标 未标注 仓库 未标注
下载量 未标注 技能市场下载数
权限级别 未标注权限 安装前请确认风险范围
许可证 许可证不明确 未说明

安装

未标注
在支持 Skills 的客户端里执行,装完问一句「你有哪些技能」验证
skillhub install user_3b52defa/stainless-coa-parser
  1. 1
    确认客户端支持

    确认你的客户端支持 Skills(Claude、Codex、Cursor 等),并升级到较新的版本。

  2. 2
    拿到技能文件

    执行上面的命令安装;也可以把仓库里的 SKILL.md 手动放进客户端的 skills 目录。

  3. 3
    刷新技能列表

    重新打开客户端,或刷新技能列表,让新放进来的技能被加载。

  4. 4
    验证是否生效

    问一句「你有哪些技能」,确认列表里出现它,再拿一个小任务试跑。

技能档案

效率
字段来自技能仓库与公开索引,中文说明由本站标注
作者 / 维护方user_3b52defa仓库 未标注 · 版本 未标注
宿主客户端未标注技能可被这些客户端加载
安装方式未标注安装包 community
权限级别未标注权限安装前请确认风险范围
许可证未说明许可证不明确,商用前请自行确认条款
仓库可用性available技能仓库当前是否可访问
最近核验未标注上游最后核验时间 · 数据更新 1791625629
正文体量31.9 KBSKILL.md 原文大小,越大说明说明书写得越细

典型使用场景

3 类
按分类整理的常见用法,具体以 SKILL.md 为准
整理待办与日程

把零散任务收进清单,排出优先级。

批量处理重复任务

把固定动作做成模板,重复执行。

把流程写成清单

把口头流程整理成可复用的步骤。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有标注权限级别,实际能做什么要装好后确认。
  • 许可证不明确,商用或二次分发前先到仓库确认条款。
  • 没有做站内核验,内容以作者仓库为准。
  • 技能只是说明书,实际效果取决于模型与客户端,装完先用小任务试一遍。

更适合

  • 需要在效率场景里给模型补一套做法的人。
  • 愿意先读一遍 SKILL.md、确认它会让模型做什么的人。

不太适合

  • 对许可证要求很严、必须明确可商用的人。
  • 只想装完就自动变强、不打算看说明书的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
技能权限级别安装方式累计安装宿主客户端安装命令
304不锈钢质保书批量识别当前 未标注权限 未标注 未标注 未标注 有
Nano PDF 文档 联网访问 ClawHub 市场 424.9 万 OpenClaw 有
自动更新程序 浏览器控制 ClawHub 市场 296.4 万 OpenClaw 有
Gemini 助手 联网访问 ClawHub 市场 254.7 万 OpenClaw 有
word DOCX 文档 联网访问 ClawHub 市场 239.6 万 OpenClaw 有
Excel XLSX 前端 联网访问 ClawHub 市场 227.0 万 OpenClaw 有

SKILL.md 全文

31.9 KB
模型实际读到的说明书原文,来自技能仓库

304不锈钢质保书识别(RapidOCR 本地引擎)

批量识别不锈钢质保书(PDF 扫描件 / 图片 / Excel):接收用户上传的单个文件或指定的本地文件夹,自动识别每份质保书所属钢厂,按对应模板抽取字段,输出标准化 Excel;也可按用户要求把质保书文件归类到子文件夹。一次最多处理 100 份质保书。全部识别在本地完成,零 API 成本,数据不出本地环境。

输出粒度为每个钢卷一行(V1.3):卷号是标准列;一份质保书涉及多个钢卷时自动按卷拆成多行(证书级字段共用、卷级字段按卷提取);单卷质保书仍为一条记录。

交互约束(必须遵守)

  1. 输入必须由用户明确指定,禁止自行搜索。只处理用户明确给出的文件夹路径或明确上传的文件。不得自行扫描磁盘、猜测路径、搜索默认目录或"帮用户找找看"。用户只说"帮我识别质保书"而未给路径/文件时,必须先询问输入位置,拿到明确路径或文件后再执行。

  2. 输出字段必须经用户确认,禁止直接产出。生成 Excel 前,先向用户展示标准列清单(见下方"输出格式"),请用户确认或增删列;用户确认后再执行导出。用户确认了自定义列集时,用 --fields "列1,列2,..." 传入。未经确认不得直接输出最终 Excel。

  3. 单次上限 100 份(见"数量限制")。

  4. 识别过程禁止 AI 脑补(V1.4.1 硬规则,详见"AI 行为约束")。识别=模板驱动+脚本输出,AI 不在识别中途改值、补值或"顺手修正";发现疑似错误只记录问题清单,经用户确认后进模板/源码修复。

AI 行为约束(防脑补,V1.4.1 起为硬规则)

图像识别不清楚、版式没见过、字段拿不准时,AI 最容易"无限蔓延脑补"——凭常识猜值、中途修模板、反复重试,既耽误时间又引入错数据。因此:

  1. 识别=技能能力,不是 AI 判断。识别与导出完全交给技能流水线(预处理 → OCR → 模板匹配 → 字段抽取 → Excel 导出),输出什么就是什么。AI 在识别过程中禁止:凭行业常识改值/补值、按"合理猜测"填充空列、中途临时改模板或脚本、对同一文件反复换口径重试。
  2. 宁可留空,不可猜值。OCR 不清、模板未覆盖、数值异常时,按技能既有机制如实处理:该列留空 + 备注列标注复核("部分卷级字段未识别,请人工复核"等),失败文件进 failures 清单。错数据比空数据更危险。
  3. 新钢厂提前注册,不裸跑。遇到识别不了或匹配到 generic 兜底的新钢厂,先走"学习模式":取 1~2 份样本校准并保存该钢厂模板(assets/templates/<厂名>.yaml),验证字段正确后再批量识别。禁止用 generic 兜底结果+AI 手工脑补凑数。
  4. 问题后置处理。识别输出 Excel 后,AI 汇总"问题清单"(哪些列空、哪些值疑似错、哪些文件失败)反馈用户;修复一律经用户确认后作为模板/源码变更执行(版本号递增+回归验证),不在识别中途进行。
  5. 快速出结果。用户要求"直接识别输出"时,一次跑完流水线并呈现 Excel 与问题清单即可,不因个别字段瑕疵阻塞整体交付。

环境准备

首次运行前确认依赖已安装(Python ≥ 3.8):

pip install rapidocr onnxruntime pymupdf openpyxl rapidfuzz pyyaml pdfplumber
  • rapidocr + onnxruntime:本地 OCR 核心引擎,基于 PaddleOCR 模型的 ONNX 推理,完全免费,支持中英文离线识别。
  • pymupdf:将 PDF 页面渲染为高分辨率图片(默认 300 DPI)。
  • openpyxl:生成最终 Excel;Excel 质保书直接读取。
  • rapidfuzz:OCR 文本与模板字段之间的模糊匹配。

表格结构还原使用独立包(可选,英文表格模型已打包进 whl,中文模型需单独下载):

pip install rapid-table
from rapid_table import RapidTable
import cv2

rapid_table = RapidTable()
img = cv2.imread("table.jpg")
table_html_str, _ = rapid_table(img)  # 返回 HTML 格式表格结构

性能参考:CPU 单页 A4 表格约 0.3 秒,内存约 200MB,无需 GPU。

批量处理(推荐入口)

用户提供文件夹或多个文件时,直接运行批量脚本,一次完成 预处理 → OCR → 模板匹配 → 字段抽取 → Excel 汇总:

# 基本用法:文件夹批量识别,输出汇总 Excel
python scripts/batch_process.py --input <文件夹或单个文件路径>

# 按钢厂分 Sheet 输出 Excel
python scripts/batch_process.py --input ./质保书 --group-by factory

# 按钢厂把质保书文件归类到子文件夹(复制,不动原文件)
python scripts/batch_process.py --input ./质保书 --classify-by factory --classify-dir ./已归类

# 混合:Excel 汇总 + 文件归类
python batch_process.py --input ./质保书 --group-by factory --classify-by factory

参数说明:

  • --input:单个文件或文件夹(文件夹递归扫描 PDF/PNG/JPG/BMP/TIF/Excel)。
  • --limit:单次数量上限,默认 100,硬上限 100 不可调高。找到的文件数超过上限时拒绝执行并提示分批。
  • --group-by factory|product_type|date:Excel 按维度分 Sheet。
  • --classify-by factory|product_type|date:把质保书原文件复制到 <归类目录>/<维度值>/ 子文件夹(复制而非移动,原文件保持不动)。
  • --fields "证书编号,卷号,产地(钢厂),C,Cr,Ni,Rm,备注":只输出用户确认过的列(逗号分隔,须为标准列名);未指定时输出全部标准列。
  • --table:启用 RapidTable 表格结构还原;未启用或缺包时自动降级为纯文本正则抽取。
  • --output:指定 Excel 输出路径,默认 ./output/coa_batch_{timestamp}.xlsx。

处理结果以 JSON 输出:total / succeeded / failed / output / classify_dir / failures。单个文件处理失败不中断批次,失败清单在 failures 中返回,并提示用户人工复核对应文件。total 按文件计数,succeeded 按记录计数(每个钢卷一条记录,一证多卷时大于成功文件数)。

用户一次上传多份质保书时,同样用此脚本(把多个文件放入临时文件夹后以文件夹为输入,或逐个文件循环调用单文件流程)。

单文件处理步骤

  1. 读取用户上传的文件,判断格式:
    - PDF:用 PyMuPDF 打开,逐页检查是否含文本层

    • 有文本层 → 直接用 pdfplumber 或 PyMuPDF 提取文字和表格结构
    • 无文本层(扫描件)→ 用 PyMuPDF 以 300 DPI 渲染为图片
    • 图片(PNG/JPG/BMP):直接进入 OCR 流程
    • Excel:直接用 openpyxl 读取
    • 此步骤可直接运行 scripts/preprocess.py,输出统一的页面清单(manifest JSON)。
  2. 对需要 OCR 的图片,调用 RapidOCR 进行文字识别:

python from rapidocr import RapidOCR engine = RapidOCR() result = engine(image_path) # result 包含每个识别文本及其坐标框

推荐直接运行 scripts/ocr_engine.py(封装了 RapidOCR 与 RapidTable 调用,输出 JSON)。

  1. 对含表格的图片,额外调用 RapidTable 做表格结构还原(返回 HTML 表格,供后续按行列坐标抽值)。

  2. 读取 assets/templates/ 下所有模板文件,匹配厂商标识(identifiers 字段):
    - 先用精确子串匹配尝试
    - 失败时用 rapidfuzz.fuzz.partial_ratio 模糊匹配(阈值 ≥ 85)
    - 返回匹配度最高的模板;所有匹配度均低于阈值时使用 generic.yaml
    - 可直接运行 scripts/match_template.py。

  3. 匹配成功后,运行 scripts/extract_fields.py,按模板规则抽取字段:
    - 正则表达式字段:直接从 OCR 全文文本中匹配
    - 表格坐标字段(source: table_html):解析 RapidTable 输出的 HTML <table> 结构,按 mapping 中的 [行, 列] 定位取值
    - 输出为 JSON 记录列表:每个钢卷一条记录(模板设 coil_key 且识别出多个不同卷号时按卷拆行;单卷/未识别卷号/未设 coil_key 时为一条)
    - 中英文字段名对照见 references/field-mapping.md。

  4. 运行 scripts/export_excel.py,生成 Excel 文件,默认输出 ./output/coa_result_{timestamp}.xlsx。支持 --group-by(可选值:factory / product_type / date),按指定维度分 Sheet 输出;支持 --fields 限定输出列。执行前必须完成"交互约束"第 2 条的字段确认。

  5. 用户指定分类维度(按钢厂 / 按产品形态 / 按日期)时,按指定维度分组输出;用户要求"归类/整理质保书文件"时,用 batch_process.py --classify-by 把原文件复制到按维度命名的子文件夹。

字段抽取规则

通用字段分为以下层级:

  • 标识类:证书编号、卷号(COIL No,V1.3 起为标准列)、合同号、炉号(HEAT No)、批号(LOT No)、钢种牌号(GRADE)
  • 产品类:产品名称、规格尺寸、件数、支数、重量、交货状态
  • 化学成分类:C、Si、Mn、P、S、Cr、Ni(304 标准范围:C≤0.08%,Cr 18.0-20.0%,Ni 8.0-10.5%)
  • 力学性能类:抗拉强度 Rm、屈服强度 Rp0.2、伸长率 A%
  • 追溯类:生产厂家、执行标准、签发日期

钢厂扩展字段示例:太钢质保书额外包含晶间腐蚀、无损探伤、硬度等检测项。

多卷拆分(V1.3)

模板通过两个声明支持"一证多卷、每卷一行":

  • 顶层 coil_key: coil_no:指定卷号字段。卷号正则在全文中找到 N 个不同值(N≥2) 时拆为 N 条记录;去重后仅 1 个值或未匹配到卷号时输出一条记录(与旧版取值一致)。
  • 字段级 scope: coil:标记卷级字段(炉号、重量、规格、厚度/宽度/长度、钢坯号等)。多卷模式下,这些字段在「本卷号匹配起点 → 下一卷号匹配终点」的文本窗口内提取(窗口包含下一卷号行,使"尾锚下一卷号"类正则可命中);单卷模式下忽略 scope,按全文提取(保证单卷结果与旧版完全一致)。
  • 字段级 scope: coil_head(V1.3.2):标记"排在卷号之前"的卷级字段(炉号、生产日期等)。头部窗口 = [上一卷号完整匹配终点(首卷为 0), 本卷号完整匹配终点],用于"日期→炉号→表面→卷号"这类版式(甬金/永旺)——卷号之前的信息属于本卷而非上一卷;若不用头部窗口,炉号会系统性错配到下一卷、最后一卷漏抽。生产日期需在 pattern 中锚定紧跟炉号的日期(如 '(\d{4}/\d{1,2}/\d{1,2})\s*\nA\d{6}A[A-Z]\d{2}'),避开头部窗口内的证书级签发日期。
  • 字段级 scope: coil_seq(V1.4.1):序列配对,用于列连排版式下"连排值块跟在全部卷号之后"的卷级字段(江苏甬金净重列先例)。此时 coil/coil_head 窗口都无效——所有卷号连排在最前面,任何窗口都切不到后面的连排块(单测验证:coil 窗口下前 N-1 卷为空、末卷错拿首卷值)。coil_seq 字段的 pattern 捕获整个连排值块(如甬金净重 '(?:0\.\d{3}\*\d{4})\n((?:\d{4,5}\n)+)一级品'——前锚 3 位小数实际规格、尾锚一级品防吃力学/合计数字块),引擎 finditer 全文找块、块内按行展开为值序列,第 k 卷取序列第 k 个值(超界留空进备注);行块版式下每卷命中一小块,同一 pattern 通吃两种版式(块间命中与块内多值统一按序展开)。配 unit: kg 自动转吨。

证书级字段(证书编号、钢种、客户、签发日期等)取全文第一匹配,各卷共用。source: regex_text 字段组(chemical/tensile)自动配对:逐卷窗口验证——每个卷窗口内命中组内锚点正则(第一个 pattern)即按卷提取(组数与卷数不一致也允许,适配多卷共用同一炉号等版式);任一窗口未命中锚点时整体降级为按证共用第一组,并在备注列标注人工复核(此时若全文锚点匹配数 > 1,额外标注 ambiguous 提示存在多组数据)。

已知局限:卷级字段按 OCR 文本顺序窗口提取,"排在本卷号之前"的卷级信息需用 scope: coil_head 显式声明(未声明时会漏抽并标注"部分卷级字段未识别,请人工复核");遇到新多卷版式时按"学习模式"补充校准。证书标签(钢种/品名/证书号等)与取值之间可能被 OCR 插入无关行(电话/地址/英文标签行),"标签后取紧邻第一词"的写法易踩坑——新模板建议双分支:先在标签后小窗口内匹配明确特征值(牌号、"有限公司"后缀等),失败再回退紧邻取值(jiangsu-yongjin V1.4.0 先例)。

派生与单位换算(V1.3.2)

字段级 derive 与 unit 声明(已按厂配置进各模板 yaml,导出前由 _apply_field_rules 统一执行):

  • derive: nominal_to_std——规格 A*B 派生:前段 A=标厚(thickness_std),后段 B=宽度(width)。适用于规格列为公称尺寸的厂:佛山诚德、福建宏旺、福建甬金、山东宏旺、阳江宏旺、印尼永旺(如 0.90*1219*C → 标厚 0.90、宽度 1219)。
  • derive: trim_to_tol——实际尺寸 A*B 派生:前段 A=公差(tolerance_actual),后段 B=宽度(width,实际宽度优先,直接覆盖 nominal 派生值)。同样适用于上述六厂的实际尺寸列(如 0.82*1241*C → 公差 0.82、宽度 1241)。
  • derive: nominal_to_tol——北材南通式规格 A*B 派生:前段 A=公差(如 1.756),标厚=round(A, 2)(1.756→1.76),后段 B=宽度(如 1.25*1255 → 公差 1.25、标厚 1.25、宽度 1255)。
  • 江苏德龙、溧阳瑞达:实际尺寸字段(thickness/width)直接经映射落到标厚/宽度列,公差列留空(证书本无公差数据)。
  • generic 兜底模板的 nominal_size 配 derive: nominal_to_tol(按北材版式假设;本工作区兜底样本即北材无头续页),结果已随"未识别钢厂,请人工复核"标注,空缺/存疑仍以复核为准。
  • unit: kg——字段级单位声明:导出前对该字段值 round(x/1000, 3) 转吨。福建宏旺、福建甬金、山东宏旺、阳江宏旺、印尼永旺、江苏甬金(V1.4.1,净重列经 coil_seq 配对)的 weight/gross_weight 已配置(原始证书以千克计);佛山诚德/德龙/瑞达重量本身为吨,不配置。
  • trim 类派生先于 nominal 类执行(保证实际宽度覆盖公称宽度)。

模板匹配逻辑

每个模板的 identifiers 字段包含该钢厂的文字标识(如"福建青拓""太钢""SHANXI TAIGANG""宝钢"等)和证书编号前缀。

匹配时:
1. 先做精确子串匹配
2. 精确匹配失败,用 rapidfuzz 做模糊匹配:

from rapidfuzz import fuzz, process

def match_factory(ocr_text, templates):
    best_score = 0
    best_template = None
    for tmpl in templates:
        for identifier in tmpl['identifiers']:
            score = fuzz.partial_ratio(identifier.lower(), ocr_text.lower())
            if score > best_score:
                best_score = score
                best_template = tmpl
    if best_score >= 85:
        return best_template
    return load_generic_template()

输出格式

Excel 文件包含以下标准列(V1.4.0 起共 33 列,前 8 列按用户固定列序):卷号、产地(钢厂)、钢种牌号、标厚、公差、宽度、卷重、边部,其后为 证书编号、炉号、产品名称、规格、数量、毛重、C、Si、Mn、P、S、Cr、Ni、N、Cu、Mo、Rm、Rp0.2、A%、硬度(HV)、执行标准、表面品级、生产日期、客户、备注(剩余列保持原相对顺序)。

V1.4.0 按用户要求从标准列中删除:合同号、批号、长度(mm)、交货状态、实际规格、交货日期、签发日期、采购方、钢坯号、开卷方式。这些字段的抽取层不动(模板照常识别、记录 JSON 中仍保留),仅导出时不再输出,--fields 也不再接受这些列名。

其中标厚/公差/宽度/边部/卷重/毛重/规格/生产日期/表面品级等为卷级字段(逐卷取值),其余证书级字段各卷共用。模板自定义扩展字段由 export_excel 自动映射到标准列(factory→产地(钢厂)、thickness/thickness_std→标厚、tolerance_actual→公差、width→宽度、weight→卷重、nominal_size→规格、hardness_hv→硬度(HV)、N/Cu/Mo 元素等;trim_size 原映射"实际规格"列已于 V1.4.0 删除,值不再输出);低频扩展字段(coating、surface_quality、inspector、ped_cert 等)自动并入备注列,信息不丢失。标厚/公差/宽度的派生规则见"字段抽取规则→派生与单位换算(V1.3.2)"。

识别异常备注(V1.3.3)

字段级 remark_pattern 声明:当字段主正则未命中时,用该宽松正则在同一窗口内捕获"疑似原文"写入备注(如 甬金 remark_pattern: '\n(\d{1,6})\n(\d{1,6})\n合格'),备注形如"卷重识别异常(OCR原文: 738/7430),未填入,请人工复核"。原则:只描述 OCR 识别到的异常原文,不猜测、不填值——错数据比空数据更危险。单卷与多卷模式均生效;多卷模式下 coil_head 字段在其头部窗口内匹配。

输出粒度:每个钢卷一行。卷号(coil_no)为标准列,V1.3.3 起列序第一(打头 8 列:卷号、产地(钢厂)、钢种牌号、标厚、公差、宽度、卷重、边部,完整列清单见下),行键 = 证书编号 + 卷号;一证多卷时各卷行共用证书级字段,卷级字段逐卷取值,并在备注列标注"一证多卷(共N卷),已按卷拆行"。

用户确认字段集后:确认全部标准列 → 直接导出;增删列 → 用 --fields 传入确认后的列名清单。--fields 中出现未知列名时脚本报错并列出全部合法列名,不会静默忽略。

用户要求分类输出时,按指定维度将数据分到不同 Sheet 或不同文件;用户要求归类文件时,原文件按维度复制到子文件夹(不动原文件)。批量模式在 Excel 之外额外返回 succeeded/failed 统计,失败的文件需提示用户人工复核。

数量限制

单次最多处理 100 份质保书(硬上限)。用户提供的文件超过 100 份时,不做处理,明确告知总数并建议分批(每次不超过 100 份)依次执行,各批次 Excel 可事后合并。--limit 参数只允许调低单次数量,调高无效。

异常处理

  • RapidOCR 识别结果为空或置信度过低时,在备注列标注"OCR识别置信度低,请人工复核"
  • 表格结构还原失败时,降级为纯文本识别,在备注列标注"表格结构未还原"
  • 钢厂无法匹配时,使用 generic.yaml 并标注"未识别钢厂,请人工复核"
  • 化学或力学数值超出 304 标准范围时,在备注列标注"数值超出标准范围"
  • 模板设 coil_key 但未识别到卷号时,卷号列留空并标注"未识别卷号,请人工复核"
  • 同一卷号在原文重复出现时按值去重,标注"卷号在原文重复出现,已按卷号去重,请人工复核"
  • 多卷模式下卷级字段窗口提取失败时该格留空,标注"部分卷级字段未识别,请人工复核"
  • scope: coil_seq 序列字段的连排值块总数少于卷号数时(OCR 丢值/丢块),超出部分该格留空并标注"部分卷级字段未识别,请人工复核",不做插值或猜测补位
  • 多卷模式下卷号之前的卷级信息(炉号/生产日期等)由 scope: coil_head 头部窗口提取;头部窗口内未命中时留空并标注复核;生产日期正则须锚定紧跟炉号行,防止误取头部窗口内的证书级签发日期
  • 配置 unit: kg 的字段(五厂净重/毛重)在导出前自动 ÷1000 转吨(保留 3 位小数);未配置单位的模板重量按原值输出
  • 字段配置 remark_pattern 时:主正则未命中 → 该列留空,宽松正则捕获的疑似原文写入备注("xx识别异常(OCR原文: …),未填入,请人工复核"),不猜测填值
  • 多卷模式下某卷窗口未命中成分/力学锚点正则时,整体降级为按证共用第一组,标注"存在多组成分/力学数据,按证共用第一组,请人工复核"
  • rapid-table 未安装或中文表格模型缺失时,跳过表格结构还原,改用正则从 OCR 文本抽取化学/力学数值
  • 批量模式下单个文件处理失败(损坏、加密、无法解析等)不中断批次,错误记入 failures 清单,最后统一提示用户人工复核

迭代路线

  • V1.0:覆盖青拓、太钢、宝钢、张浦四家 + 通用兜底。RapidOCR + RapidTable 本地识别方案。
  • V1.1(2026-09-12):基于用户真实样本新增 9 家钢厂模板(assets/templates/),全部采用 regex_text 正则(不依赖 rapid-table),并已用 19 份样本回验(18/19 钢厂匹配正确、核心字段全中):
  • shandong-hongwang(山东宏旺,SDHW 前缀)
  • fujian-yongjin(福建甬金,FJYJ 前缀)
  • yongwang-indonesia(印尼永旺,青山系,含 Cu/N/Mo 扩展元素)
  • foshan-chengde(佛山诚德,证书号 9位-序号)
  • yangjiang-hongwang(阳江宏旺,含 N 元素,纯数字证书号)
  • fujian-hongwang(福建宏旺,FJHW 前缀)
  • beicai-nantong(北材南通,含 N 元素,无炉号列)
  • jiangsu-delong(江苏德龙,DLYC 前缀,无炉号列,含钢坯号/开卷方式)
  • liyang-ruida(溧阳瑞达,DLCZ 前缀,与德龙同源版式)
  • 同步调整:export_excel.py 对模板自定义扩展字段自动并入备注列(不丢信息)。
  • 已知限制:无头续页图片(页眉被裁、无钢厂名)落入 generic 兜底(V1.3.1 起同样按卷拆行)并标注人工复核;德龙/瑞达 OCR 偶发丢数字(证书号正则已放宽至 7-8 位容错)。
  • V1.3(2026-09-13):输出粒度改为"每个钢卷一行":
  • 模板顶层 coil_key 标识卷号字段,9 家钢厂模板与 generic 兜底模板均已接入;卷号(coil_no)从备注扩展字段提升为标准列(紧跟证书编号);
  • 一证多卷自动拆行:scope: coil 卷级字段按「本卷号 → 下一卷号」窗口提取,chemical/tensile 正则组按"每个卷窗口命中锚点即按卷配对"(组数与卷数不一致也允许),任一窗口未命中时按证共用并标注复核;
  • 单卷质保书输出与 V1.1 完全一致(17 份真实样本回归 + 北材南通版式合成两卷用例 16 项断言通过);
  • 青拓/太钢/宝钢/张浦旧模板尚未接入 coil_key(仍按每证一条输出);多卷配对已用 17 份真实样本验证(单证最多 206 卷,287 行与文本层取证吻合)。
  • V1.3.1(2026-09-13):列完整性与兜底拆卷补全:
  • generic 兜底模板接入 coil_key,卷号正则以多分支覆盖常见厂牌格式(北材 Y+5位+字母+5位 / 宏旺系 两字母+8位+两字母+数字+字母 / 甬金 FJ+10位-2位 / 德龙瑞达 DL+6~8位+字母尾 / 永旺 QH+4位+字母+4位+两字母+2位);未识别钢厂也按每钢卷一行输出;
  • generic 安全设计:不配"卷块式"重量正则(OCR 行序错乱时会把成分数值误当重量,错数据比空数据更危险);钢种无前缀分支仅匹配带字母牌号(SUS/ASTM S+数字/GB 牌号),不放裸数字(防止把屈服强度 321MPa 误当 321 钢种);证书编号首字符收紧为字母数字(防 OCR 标点噪声如"。");
  • 标准列由 24 列扩展至 43 列(此前文档误记 42):高频卷级/证书级扩展字段提升为独立列(厚度/宽度/长度/边部/毛重/切边规格/硬度(HV)/N/Cu/Mo/表面品级/交货日期/生产日期/客户/采购方/钢坯号/开卷方式,nominal_size 映射到规格列),低频字段(coating/tolerance/surface_quality/inspector/ped_cert 等)仍并入备注列。
  • V1.3.2(2026-09-13):产地/标厚/公差/宽度列 + 单位换算 + 头部窗口修复(用户按 Excel 复核后点名的四类问题一次修复):
  • 钢厂列改名"产地(钢厂)";原厚度(mm)/宽度(mm)两列升级为 标厚/公差/宽度 三列,值由规格与实际尺寸派生(derive 按厂配置进 yaml,三种模式见"派生与单位换算");
  • 新增 scope: coil_head 头部窗口机制:修复甬金/永旺"日期→炉号→表面→卷号"版式下炉号系统性错配到下一卷(每卷拿到的是下一卷炉号、最后一卷为空)的根因——炉号/生产日期改在"上一卷号终点→本卷号终点"窗口内提取,生产日期锚定紧跟炉号行;
  • 新增 unit: kg 字段级声明:福建宏旺/福建甬金/山东宏旺/阳江宏旺/印尼永旺净重毛重 kg→吨(round(x/1000,3));
  • 山东宏旺 weight/gross_weight 补"毛边粘连"第二分支(OCR 行序错乱时净重与成分同行、毛重前无换行:毛边10575\n10531 0.049 0.35...),修复个别卷重量缺失;
  • 回归:多卷合成 19 项断言 + 甬金式 coil_head 合成 12 项断言全过;真实 17 份样本 295 行 0 失败。
  • V1.3.3(2026-09-13):列序固定 + 重量类缺行根因修复(用户复核后点名):
  • 列序固定:卷号、产地(钢厂)、钢种牌号、标厚、公差、宽度、卷重、边部 打头,其余列保持原相对顺序;"重量"更名"卷重"、"切边规格"更名"实际规格"(trim_size 映射同步);
  • 瑞达/德龙 13+2 卷重量缺失根因=正则过严而非 OCR 错误:大卷(9~14 吨)证书上重量只印 2 位小数(9.33/11.94)甚至 1 位(11.9/12.4),原正则强制 3 位小数;经厚度×宽度×密度反推验证识别值完整正确,weight 正则放宽为 \d{1,2}\.\d{1,3}(后锚"重量行后紧跟成分行 C+Mn"保证位置唯一,安全性已验证);
  • 甬金 1 卷重量缺失根因=OCR 丢位(净重 7382→"738"):无法保证正确恢复,保持列留空;新增字段级 remark_pattern 机制,宽松正则捕获疑似原文写入备注("卷重识别异常(OCR原文: 738/7430),未填入,请人工复核");
  • 回归:多卷 20 项 + coil_head 12 项断言全过;抽查断言含列序、旧列名不残留、瑞达卷重 206/206、异常行备注必含识别原文。
  • V1.4.0(2026-09-13):标准列精简(43→33 列)+ 新增肇庆宏旺模板:
  • 标准列删除 合同号、批号、长度(mm)、交货状态、实际规格、交货日期、签发日期、采购方、钢坯号、开卷方式 十列(用户点名);抽取层不动(模板与 extract_fields 照常抽取,记录 JSON 仍含这些字段),仅导出层不再输出;--fields 校验以新列集为准;
  • 新增 zhaoqing-hongwang(肇庆宏旺,ZQHW 证书号前缀 / QG+8位+A[Y1]\dW 卷号):宏旺系版式但成分为"C Si Mn P 同行 + S/Cr/Ni 竖排"(与山东宏旺 7 值同行、Ni 在 Cr 前不同),炉号双形态(Q+10位 / YG+8位+两字母+数字+W),生产日期月/日 1~2 位,毛重在前净量在后(unit: kg);成分+力学 11 值联合签名逐卷配对;2 份文本层样本 10 卷全字段断言通过(卷号/炉号/日期/规格派生/重量换算/成分/力学/备注无复核)。
  • V1.4.2(2026-09-13):江苏甬金实际规格→公差/宽度(用户点名):
  • jiangsu-yongjin 新增 trim_size 字段(scope: coil_seq + derive: trim_to_tol):实际规格 0.695*1247 → 公差 0.695 / 宽度 1247(实际宽度覆盖名义 1219,标厚仍由名义规格派生 0.70,trim 类先于 nominal 类执行由 _apply_field_rules 保证);
  • 与 weight 同根因(实际规格连排块在全部卷号之后,coil/coil_head 窗口够不着),复用 V1.4.1 coil_seq 机制,引擎零改动;pattern 捕获整个实际规格连排块(名义规格 2 位小数不匹配 0\.\d{3} 即块首无需前锚;尾锚=重量块首值 4~5 位整数;贪婪块尾遇非数字行整体失配→留空+备注复核,宁缺勿错);
  • 验证:verify_weight_trim.py 4 证 16 卷 × (卷重/公差/宽度) 48 项断言 ALL PASS(列连排 ss0260002703/3122/3123 与行块 3124 通吃,含 1249 宽度变体);肇庆宏旺 10 行回归正常(其 trim_to_tol 路径不受影响)。
  • V1.4.1(2026-09-13):江苏甬金卷重(净重列)修复 + AI 防脑补硬规则(用户点名):
  • 新增 scope: coil_seq 序列配对机制(extract_fields.py):解决列连排版式下"连排值块跟在全部卷号之后"无法用 coil/coil_head 窗口配对的根因(单测 verify_weight.py 复现:coil 窗口下前 3 卷 None、末卷错拿卷 1 值);引擎 finditer 捕获连排块、块内按行展开、第 k 卷取第 k 值,超界留空进复核备注;
  • jiangsu-yongjin 新增 weight 字段(净重列,'(?:0\.\d{3}\*\d{4})\n((?:\d{4,5}\n)+)一级品' + unit: kg):前锚 3 位小数实际规格(与 2 位小数名义规格互斥)、尾锚一级品;列连排(ss0260002703/3122/3123)与行块(3124)两种版式同一 pattern 通吃,4 证 16 卷单测全过(如 ss0260002703 卷1 22115kg→22.115t、3122 卷1 22114kg→22.114t、3124 卷1 7424kg→7.424t);
  • 新增"AI 行为约束(防脑补)"硬规则:识别过程禁止 AI 改值/补值/中途修模板;识别不清留空+备注复核;新钢厂先注册模板再批量跑;问题清单后置、经用户确认后修复;快速出结果不因个别字段阻塞交付;
  • 回归:甬金 4 证 16 卷卷重逐卷断言全过;肇庆宏旺/其余路径不受影响(coil_seq 为新增旁路)。
  • V1.3.4(2026-09-13):新增江苏甬金模板 + 福建甬金两处修正(中储质保书 5 份真实样本驱动,23 卷全过):
  • 新增 jiangsu-yongjin(江苏甬金,JSYJ 证书号前缀 / JS+10位-2位 卷号 / GB 牌号 06Cr19Ni10):列连排版式(一证 N 卷时每字段 N 值竖排连排,与福建甬金"按行块"相反),窗口机制无法逐卷配对,模板按"安全降级"策略配置——卷1 靠 coil_head 拿生产日期/炉号;成分/力学 regex_text 组降级共用第一组(=各列首值=卷1)并触发 ambiguous 备注复核(C/Rm 泛锚保证全文锚点数>1);重量/实际规格各卷不同且无安全锚点,不配置(留空,宁缺勿错);OCR 坑位:Ni 区 10.50(MAX)插队卷值中间,锚用可选 (?:10\.50\n)? 兼容。
  • fujian-yongjin certificate_no 放宽为 证明书号[\s\S]{0,120}?\n(FJYJ\d+):部分扫描件 OCR 把英文品名/表头行插在"证明书号:"与证书号之间导致锚定失败(10 行证书编号缺失根因)。
  • fujian-yongjin heat_no/production_date 补 Y 前缀分支 ([AY]\d{6}[A-Z]\d{2}):新批次炉号为 Y+6位+字母+2位(Y221107E64),原正则只认 A+6位+A字母+2位(19 行炉号/生产日期全空根因)。
  • 模板字段名注意:表面用 surface_finish(映射"表面品级"列)、氮用 N(映射 N 列),自造名(surface/nitrogen)会落入备注扩展字段。
  • V1.2+:增加"学习模式"——遇到未知版式时,输出待确认字段映射表供用户手动修正,修正结果保存为新模板。

常见问题

5 问
答案由本站依据条目字段整理
304不锈钢质保书批量识别怎么安装?

在支持 Skills 的客户端里执行:skillhub install user_3b52defa/stainless-coa-parser。安装方式为未标注。装完刷新技能列表或重开客户端。

304不锈钢质保书批量识别支持哪些客户端?

资料没有标注宿主客户端,但只要客户端支持 Skills(Claude、Codex、Cursor 等),一般都能加载。

304不锈钢质保书批量识别权限高吗,安全吗?

权限级别为未标注权限。安装前先看它会读取或写入哪些内容。

304不锈钢质保书批量识别收费吗?

本站不代收费用,也没有标注具体价格。是否收费取决于技能本身和所用的模型或客户端,正式使用前按作者说明确认。

304不锈钢质保书批量识别用什么许可证?

许可证标注为 未说明(许可证不明确)。商用或二次分发前请到仓库确认条款原文。

热门专题

按场景挑技能
全部专题 →

技能内容以作者仓库为准;分类、权限级别与许可证状态的中文说明为中文整理,最近核验 未标注。