| 名称 | data-standardization display_name: 数据标准化规范 display_name_en: 数据标准化规范 |
| 描述 | 中文企业表格数据(CSV/Excel)标准化规范:字符/结构/类型/单位/枚举/标识六层处理规则与内置字典包 D-01~D-11。当用户要求清洗、标准化表格数据(全半角、空格、日期格式、金额单位、枚举值映射、手机号/身份证校验),或提到《数据标准化-内置规范清单》《数据治理平台 FR-2》时使用。所有规则均为确定性规则;绝不允许大模型直接改写取值。 description_zh: 按六层顺序锁(编码字符→结构→类型格式→单位→枚举值域→标识)标准化中文企业表格数据;内置行政区划/性别/币种等离线字典包;规则全部确定性、幂等可复现,输出证据三件套,PII 仅出口脱敏。 description_en: 按六层顺序锁(编码字符→结构→类型格式→单位→枚举值域→标识)标准化中文企业表格数据;内置行政区划/性别/币种等离线字典包;规则全部确定性、幂等可复现,输出证据三件套,PII 仅出口脱敏。 examples_zh: - “帮我把这份客户表的日期、金额和手机号标准化” - “城市列里混着「济南市/JINAN/青岛」,帮我统一成标准名” - “这份表是 GBK 编码还有全角数字,先归一化再分析” examples_en: - “帮我把这份客户 CSV 里的日期、金额和手机号标准化” - “把混有「济南市/JINAN/青岛」的城市列统一成标准名称” - “该文件是 GBK 编码且含全角数字,请先归一化再分析” |
| 版本 | 1.1.0 |
| 作者 | “guoyn_lc” |
数据标准化(六层规则 + 内置字典包)
定位
把杂乱的企业结构化表格数据标准化为可分析形态。所有规则都是确定性规则(正则 / 查表 / 校验位算法 / 格式化函数),不依赖大模型、不依赖网络;大模型只产出建议,建议最终必须落成同一种确定性操作来执行。完整规则表(含参数、理由、规则元数据 Schema、字典包内容)见 @references/rules.md。
执行流程(层间顺序锁,不可调换)
- 先画像后动手:列类型推断、缺失率、唯一值率、疑似 PII / 商业敏感列标注 → 产出列级画像,作为「适用列」依据;
- 按层执行:
L0 编码字符 → L1 结构(列名) → L2 类型格式 → L3 单位 → L4 枚举值域(字典) → L5 标识(PII),层内按编号顺序;乱序结果 ≠ 固定顺序结果(顺序锁是验收项); - 逐条产出证据:每条规则执行后输出三件套——影响行数(rows_affected)、前后示例(≤5 条,先脱敏)、未匹配/解析失败清单;
- 超界不静默:解析失败、未匹配值 → 进异常/未处理清单并给原因,绝不丢弃、绝不静默改写;
- 输出结构化结果:变更摘要 + 证据三件套 + 未处理清单(什么没处理、为什么)。
隐含收益提醒:标准化前置能提高去重命中率——「 济南 」 与 「济南」 先归一再去重。
六层规则速查(默认策略;完整参数与理由见 @references/rules.md)
| 层 | 范围 | 关键规则 |
|---|---|---|
| L0 编码字符 | 一切的输入前提 | 编码→UTF-8 无 BOM;全角→半角逐字符映射(123会毁掉后续所有解析);BOM/零宽空格/不间断空格/控制字符清理;Unicode NFC 归一(NFKC 有破坏性,仅白名单列);首尾裁剪+连续空白折叠(可关);大小写默认不改写,中文列永远不动 |
| L1 结构 | 列名与表头 | 列名规范化+重名检测;表头重定位(首行非表头探测);字段别名词典(电话/联系方式/手机号→mobile);单位后缀抽取(金额(万元)→语义列名+单位元数据,供 L3);空列名补全 |
| L2 类型格式 | 值的类型 | 空值表示统一(NULL/N/A/无/-→空,疑似变体需人工确认);布尔统一(是/否 Y/N true/false);日期→ISO 8601:内置解析族含 2026/3/1、20260301、2026年3月1日、Excel 序列号(含 1900 闰年 bug)、Unix 时间戳秒/毫秒自动判别;歧义 01/02/2026 默认月/日/年,同列首段>13 自动翻转并附证据;两位年 pivot 00–68→20xx、69–99→19xx;非法日期(2026-02-30)进异常清单不改写。数值:千分位剥离、括号负数 (123)→-123,不改精度;百分比 85%→0.85 或 85(列级参数) |
| L3 单位 | 依赖 L2 数值化 | 货币符号剥离+币种列(ISO 4217 查 D-03;同列多币种→提示);计量换算(斤→kg 等,必须附换算因子+影响行数证据);万元/元混列→统一到元,金额默认 2 位小数 |
| L4 枚举值域 | 字典映射 | 字典从 @references/ 加载(索引 _index.yaml);四级匹配漏斗:①精确匹配 → ②别名查表 → ③规则归一(去「市/省/自治区」后缀等) → ④频次建议(高频未匹配值聚合,人工确认);模糊匹配(编辑距离/拼音)默认关闭,开启后逐条确认;确认后映射自动写回字典表(版本 +1,如 dict:城市 v0.1→v0.2) |
| L5 标识 | 只做识别+格式化+校验标记 | 手机号:去 +86/86 前缀与分隔符,^1[3-9]\d{9}$ 校验,座机分流;不合法→标记不修改。身份证:15/18 位识别,18 位校验位算法(GB 11643 MOD 11-2),失败→标记。银行卡:Luhn 校验(P1)。社会信用代码:MOD 31-2(P1)。邮箱:域名小写化+简化校验。地址:不自动识别——列名提示+人工勾选(半自动) |
内置字典包(D-01~D-11,全部离线、YAML 版本化)
字典包实体文件随本 skill 交付于 @references/(索引与统一 Schema 见 @references/_index.yaml),L4 层执行时从对应文件加载,禁止凭记忆改写:
| 包 | 文件 | 内容 | 优先级 |
|---|---|---|---|
| D-01 行政区划 | @references/D-01-region.yaml | 省级全量(GB/T 2260 代码 + 简称别名)+ 常见城市切片;市/县级全量走离线更新包 | P0 |
| D-02 性别 | @references/D-02-gender.yaml | 男/女/M/F/1/2 → 男/女 | P0 |
| D-03 币种 | @references/D-03-currency.yaml | 人民币/RMB/CNY → CNY(ISO 4217 常用币种) | P0 |
| D-04 国家地区 | @references/D-04-country.yaml | 常用国家中英文名 + ISO 3166 两位码(骨架) | P1 |
| D-05 民族 | @references/D-05-ethnicity.yaml | 56 族标准名 + 常见简称 | P1 |
| D-06 学历学位 | @references/D-06-education.yaml | 本科/大学本科/学士 … 标准口径 | P1 |
| D-07 行业分类 | @references/D-07-industry.yaml | GB/T 4754-2017 门类(A–T) | P1 |
| D-08 布尔 | @references/D-08-boolean.yaml | 同 L2-2 查表面 | P0 |
| D-09 计量单位 | @references/D-09-units.yaml | 配合 L3-2 的单位与换算因子 | P1 |
| D-10 业务状态模板 | @references/D-10-status.yaml | 订单/审批状态枚举模板(用户可改) | P1 |
| D-11 商品类目 | @references/D-11-category.yaml | 仅骨架模板(自由文本不承诺自动) | P1 |
匹配漏斗、包 Schema 与映射写回机制(version +1)见 @references/rules.md 第五节。D-11 商品类目等自由文本域不承诺自动(无标准字典→未处理清单)。
红线(违反即停)
- 禁止大模型直接改写取值——建议只落在「生成候选映射/候选操作」,执行永远由确定性规则完成(可复现 + 可审计);
- 幂等:f(f(x))=f(x),同输入重复执行零变更;交付前自验第二遍 rows_affected=0;
- PII 只在出口脱敏:手机号/身份证/银行卡等在摘要、日志、报告、示例中一律掩码(
138****5678),任何输出先过脱敏再展示,无旁路; - 模糊/语义映射必须逐条人工确认,未确认不落盘;
- 不改业务精度:四舍五入、单位目标口径等属业务决策,列为确认项不自动执行;
- 明确不内置:自由文本语义清洗(进未处理清单)、地址自动拆分(半自动)、本体/知识图谱。
交付前自检(DoD)
- [ ] 幂等:golden 样本执行两遍,第二遍 rows_affected = 0
- [ ] 证据三件套齐全:影响行数 / 前后示例(已脱敏)/ 未匹配清单
- [ ] 未处理清单明确:没处理的 + 原因
- [ ] 顺序合规:L0→L5 未乱序执行
- [ ] 输出无明文 PII / 商业敏感值(人工勾选列同口径处理)
- [ ] 全部参数偏离默认值时已声明(可配置,但偏离要留痕)