案例 · 行业平台 · 已交付

EU CosIng 5 个 Annex 子成分自动归一

EU CosIng 全 Annex 入库与归一

交付状态
已交付
工期
2 周
预算区间
¥4.2 万
客户类型
内部
客户

CosDev 内部数据底座(同时供 INCILABSV2 / FORMULAW / CosPulse 三个产品调用)

挑战

EU CosIng 是欧盟化妆品成分库的官方权威,分 Annex II(禁用 1,675 项)/ III(限用 286 项)/ IV(着色剂 153 项)/ V(防腐剂 59 项)/ VI(防晒剂 32 项)5 个附录,但每个附录里的"子成分"(同一限制下的多个变体)散落不规整,需要归并到主 INCI 表才能在产品里精确校验

方案

match_names 归一函数 + GIN 索引加速 + 人工 review 队列 + pub_inci_safe_limit 替换链触发器

项目复盘

2 周 里我们做了这些

背景

EU CosIng 这套数据 INCILABSV2 之前用过,但只用到 Annex 主成分名,没把"子成分"展开。例如 Annex II 第 423 条 "Hydroquinone and its salts"——主成分名只有一行,但实际禁用对象包括 Hydroquinone / Sodium Hydroquinone Sulfonate / Potassium Hydroquinone Sulfate / 等 4 个子成分。如果产品里写了子成分名,主成分名匹配不到就不会触发禁用警告,是合规漏洞。 另一个问题是 EU CosIng 在 2025 年下半年发布过一次大调整(COSING-LAB 重命名),143 个老 INCI 名被合并到新的 canonical 名。我们的数据底座里这部分需要建立 supersedes 关系链,否则查询历史产品会得到过时结果。

我们做了什么

总工期 2 周。 第 1 周前 3 天|数据导入。从 EU CosIng 官方 CSV 拉 5 个 Annex 全量数据,去重后 3,151 个子成分。每个子成分含 INCI 名 + 中文名(机翻)+ 限制条件 + 来源 Annex + 子成分父级 ID。建表 pub_eu_cosing_synonym + 索引。 第 1 周后 4 天|归一匹配。3,151 个子成分通过 match_names 函数对齐 bse_inci 主数据。match_names 是我们之前积累的归一函数:去除空格 / 中英文括号 / 标点符号,全部转大写。命中 2,988 个(94.8%),剩 163 个进人工 review。这一步用了 GIN 索引加速,3,151 条匹配跑了 0.8 秒(线性比较要 11 分钟)。 第 2 周前 3 天|163 个 review。我们用一个简单的 Web 表单让法规专家陈丽逐个看:① 这是真的没匹配(新成分)?② 还是命名差异(match_names 没归一干净)?最终结果:38 个真新成分(写 LAB- 前缀新建 bse_inci)+ 89 个命名差异(更新 match_names 归一逻辑)+ 36 个 EU 已废弃成分(标 is_superseded=true)。 第 2 周后 4 天|替换链触发器 + 双向回写。建立 pub_inci_safe_limit 表关联子成分 → 主成分 → bse_inci,三表通过触发器自动维护一致性。当 EU 后续再发布更新时,is_superseded 字段会自动维护替换关系链。fn_lab_supersedes_cosing 这个函数后来被 CosIng 第二次更新时验证有效(自动处理了 17 个 supersede 关系,没人工介入)。

数据结果

· 3,151 个 EU CosIng 子成分全部入库 · 95% 自动匹配 INCI 主数据(2,988 / 3,151) · 163 个 review 1 周完成 · INCILABSV2 / FORMULAW / CosPulse 三个产品立刻获得"子成分级"合规校验能力(之前只能在主成分级判断) · 后续 EU CosIng 更新(2025 年底)通过 supersedes 触发器自动处理 17 个变更,0 人工介入 · 这套数据底座成为 FORMULAW EU 1223 校验引擎的核心

复盘 · 哪里做得不够

match_names 归一函数是底层基础,但 5% 边界 case 总会出现。这个项目让团队定下规则:所有"自动归一 + 人工 review"项目都必须配套一个 review UI,不能让人工 review 散落在 Excel / 邮件里——否则同一个 review 决策会反复出现,因为没人记得"上次怎么处理的"。 95% 自动化听起来够好,但剩下 5% 如果没有标准化人工流程,最后会拖死整个项目。这条经验后来在所有"AI 提取 + 人工兜底"项目都用上了。

95% 自动化听起来够好,但剩下 5% 如果没有标准化人工流程,最后会拖死整个项目。
CosDev · 周伟
技术栈
PostgreSQLpg_trgm GINmatch_names 归一Python人工 review 队列

想做类似的项目?

把你的情境告诉我们,48 小时内给到初步方案 + 报价区间。