指南
产品属性:如何提取、标准化和映射
整洁的产品属性是筛选、比较、数据源和合规草稿能够正常运作的基础。本指南涵盖属性架构、提取、单位与词汇规则,以及将杂乱的供应商取值转化为一致数据的分类体系映射。
每个供应商描述同一件事的方式都不同。一份数据表写“Capacity: 1,5 l”,另一份写“1500 ml”,第三份则把“holds 1.5 liters”埋在一段文字里。对购物者来说这是同一个事实;对筛选器或数据源来说,它们却是三个互不相关的字符串。产品属性标准化就是把这些差异转化为一个值、一种单位、一个属性名称。
本指南按实际工作的先后顺序展开:架构、提取、数字和文本的标准化、分类体系映射、变体和验证。示例使用真实的单位代码和分类体系结构,因此您可以直接套用。
什么是产品属性(以及什么不是)
产品属性是一个带有值的命名特性:material = stainless steel,capacity = 1.5 L,color = black。属性提取研究将这些称为属性–值对。属性描述的是产品本身,无论在哪里销售都保持不变,因此应放在结构化字段中,而不是只出现在描述性文字里。
有三个相邻的概念很容易与属性混淆,而把它们混在一起正是后来大多数架构问题的根源:
| 概念 | 用途 | 示例 | 常见存放位置 |
|---|---|---|---|
| 属性 | 描述产品的某项特性 | 材质:不锈钢;容量:1.5 L | 规格表、筛选器、类目字段 |
| 标识符 | 唯一标识产品或贸易项目 | GTIN、MPN、SKU、型号 | 专用的标识符字段 |
| 变体选项 | 买家可从中选择的属性 | 颜色:黑 / 白;尺码:S / M / L | 变体维度(Shopify 最多允许 3 个选项) |
| 描述 | 以文字说明利益点和用法 | “几分钟内烧开一整壶水” | 描述和要点列表 |
在提取任何内容之前先定义属性架构
属性架构是每个值都必须满足的约定。没有它,提取只会得到源文件碰巧写的任何内容,而标准化也会变成猜测。对于每个属性,请确定名称、数据类型、标准单位、允许值或验证规则、是否可以有多个值,以及在哪些情况下为必填。
架构应按产品系列建立,而不是做成一个巨大的清单:水壶需要容量和额定功率,T 恤需要纤维成分和尺码。先从您的渠道要求的、购物者用来筛选的属性开始,再添加数据表能够稳定提供的技术属性。
| 属性 | 数据类型 | 单位 / 格式 | 允许值或规则 | 必填 |
|---|---|---|---|---|
| model_number | 文本 | — | 与制造商印刷内容一致;不添加空格 | 是 |
| gtin | 文本(数字) | 8、12、13 或 14 位数字 | 有效的 GS1 校验位 | 已分配时必填 |
| capacity | 小数 | LTR(升) | 0.1 至 5.0;每个变体一个值 | 是 |
| rated_power_min / rated_power_max | 整数 | WTT(瓦) | 最小值 ≤ 最大值;两者均来自同一额定值行 | 是 |
| body_material | 枚举(多值) | — | stainless steel、glass、plastic、ceramic | 是 |
| color | 枚举 | — | 基础颜色列表;营销名称单独存放 | 是,按变体 |
| net_weight | 小数 | KGM(千克) | > 0;不得超过毛重 | 用于运输 |
属性值从哪里来,以哪个来源为准
值通常来自多个并不总是一致的来源。请为每个属性设定来源优先级,使冲突按统一的方式解决,而不是由最后编辑记录的人说了算。
一个实用的默认原则:技术文件优先于营销文案,具体文件优先于一般文件。当同等级别的来源相互矛盾时——例如数据表和包装给出了不同的重量——不要取平均值,也不要随便选一个;请询问供应商哪一个是现行的。
- 数据表和规格表:尺寸、额定值、材质和性能值最可靠的来源,通常以表格形式呈现。
- 包装和标签设计稿:对包装上印刷的内容具有权威性,如净含量、警告和标志。
- 安全数据表:化学品的危害分类、成分和理化性质;不属于营销属性。
- 供应商的产品描述:适用于从不出现在表格中的属性(款式、预期用途、兼容型号),但精确度最低。
如何从产品描述中提取属性
自由文本描述是最难处理的来源,因为值被包裹在句子中,受营销语言修饰,有时还带有否定。无论您使用规则、已知值词典还是语言模型,保证输出可信的流程都是一样的:
- 在阅读任何文本之前,先列出该产品系列的目标属性及其允许值和单位。
- 将文本拆分为句子和要点,然后查找候选值:带单位的数字、已知的词汇术语,以及“compatible with …”(兼容……)之类的模式。
- 检查每个候选值的上下文,看是否有限定词(“最多”“约”“起”)、否定(“不含 BPA”“不适用于”)和条件(“带盖”“在 20 °C 时”)。
- 每个值只分配给一个属性;当一个数字可能属于两个属性时,将其保留为未分配状态以待审核,而不是猜测。
- 使用后续各节的规则对值和单位进行标准化,并保留原始文本。
- 标记每个仅来自营销文案的属性,以便审核人员在其用于规格表或声明草稿之前,对照数据表进行确认。
| 描述中的文字 | 属性 | 提取的值 | 备注 |
|---|---|---|---|
| “……1.7 升不锈钢水壶……” | capacity;body_material | 1.7 LTR;stainless steel | 一个短语中包含两个属性 |
| “……带不含 BPA 的塑料盖……” | lid_material;bpa_free | plastic;true | 否定转为布尔值,而不是材质 |
| “……不适用于电磁炉……” | induction_compatible | false | 否定陈述已反转 |
| “……有哑光黑和奶油色可选……” | color(变体选项) | black;beige | 营销名称单独保留 |
将数据表表头映射到标准属性名称
每个制造商对同一属性的标注方式都不同,往往还使用自己的语言。请建立一个同义词表,将您实际遇到的表头文字映射到您的标准属性名称;它起初增长很快,之后趋于稳定,并成为您最可重复使用的标准化资产。同时记录表头中印刷的单位:在“Weight (lbs)”下,没有任何单元格会重复单位。表格版式、扫描件和 OCR 请参阅关于从 PDF 提取产品数据的指南。
| 印刷的表头 | 标准属性 | 表头隐含的单位 | 备注 |
|---|---|---|---|
| Rated power / Power consumption / Leistung 等 | rated_power | WTT | 检查是输入功率,而不是输出功率 |
| Net weight / Weight (unit) / Nettogewicht 等 | net_weight | 按印刷内容为 KGM 或 LBR | 不是运输重量 |
| Capacity / Volume / Fassungsvermögen | capacity | LTR 或 MLT | 针对容器,而不是包装体积 |
| Dimensions (W × D × H) mm | width、depth、height | MMT | 轴的顺序取自表头 |
标准化数字和单位
将每个定量属性存储为两个字段:一个数字和一个单位代码。UN/CEFACT 第 20 号建议书(“国际贸易中使用的计量单位代码”)为此提供了三字符通用代码,schema.org 在其 unitCode 属性中也使用相同的代码,例如 value 为 25、unitCode 为 CMT 的 QuantitativeValue。使用这些代码而不是自由文本的单位(“cm”“cms”“centimetres”),可以消除一整类不匹配问题。
为每个属性选择一个标准单位,通常是 SI 单位或其十进制倍数,并在导入时进行换算,使不同供应商的值可以正确比较。保留印刷的原始值和单位以便追溯,并在导出时换回渠道所用的单位:Shopify 产品 CSV 要求重量以克为单位,而 WooCommerce 使用店铺中配置的重量和尺寸单位。
请留意会导致无声错误的细节。小数和千位分隔符取决于文档的区域设置:在德语数据表中,“1.000 W”是一千瓦。将范围拆分为最小值和最大值字段,将公差与标称值分开存储,并将“约”或“最大”等限定词保存在单独的字段中。英制换算使用精确的定义(1 英寸 = 25.4 mm;1 lb = 0.45359237 kg);只在显示时四舍五入一次。
| 印刷的原始值 | 标准化值 | UNECE Rec 20 代码 | 应用的规则 |
|---|---|---|---|
| 1,5 l | 1.5 | LTR | 按文档区域设置读取小数逗号 |
| 1500 ml | 1.5 | LTR | 换算为该属性的标准单位;保留原值 |
| 1.000 W(德语数据表) | 1000 | WTT | 句点按千位分隔符读取 |
| 220–240 V~ | 最小 220,最大 240 | VLT | 范围拆分;“~”存储为电流类型 AC |
| Ø 12 mm ± 0,2 | 标称值 12,公差 0.2 | MMT | 公差单独存储 |
| 约 2.3 kg | 2.3(限定词:约) | KGM | 保留限定词,不丢弃 |
| 5 lb | 2.26796 | KGM | 按 0.45359237 换算;保留 LBR 原值 |
| 1/2 in | 12.7 | MMT | 分数已转换;保留 INH 原值 |
| 6 件装 | 6 | H87 | 每包的件数 |
对文本属性使用受控词汇
受控词汇是文本属性可取值的列表,以及映射到每个值的同义词。它可以让“Color: black”筛选器捕获被描述为“blk”“Black”和“schwarz”的产品。
当营销和筛选的需求相互冲突时,保留两个字段:一个用于筛选器和数据源的标准化基础值,以及一个用于展示的制造商自有名称。“Midnight Graphite”作为产品页面的细节很好,作为筛选值却毫无用处;“gray”则恰恰相反。对于多语言目录,请将词汇值存储为与语言无关的代码并翻译其标签,使同一产品在每种店铺语言中都能正确筛选。
| 原始文本值 | 标准化值 | 词汇规则 |
|---|---|---|
| blk / BLACK / schwarz | black | 同义词和译文映射到同一个代码 |
| Midnight Graphite | gray(保留展示名称) | 营销名称单独存放 |
| 18/8 SS | stainless steel | 缩写已展开;牌号作为单独的属性保留 |
| Cotton 95%, Elastane 5% | cotton 95;elastane 5 | 成分以值–百分比对的形式表示 |
| Yes / ✓ / included | true | 布尔值简化为 true 或 false |
将属性映射到分类体系和渠道架构
分类体系决定哪些属性适用于某个产品以及它们叫什么名称。您很少能自己选择:零售商可能要求 GS1 GPC,批发商要求 ETIM,Shopify 要求其标准产品分类体系(Standard Product Taxonomy),搜索引擎则读取 schema.org 标记。请以您自己的属性架构为主,并维护到每个外部分类体系的映射。
在 GS1 GPC 中,砖块(brick)是基本构件,砖块属性承载诸如某种牛奶是动物来源还是非动物来源之类的细节。ETIM 为每个类别提供一组预定义的特征,带有固定的值列表和单位,并发布 17 种语言的模型。Shopify 要求根据产品的主要功能选择一个类目;设置类目后即可解锁类目元字段。schema.org Product 具有专用属性,如 gtin、mpn、brand、color、material、size 和 weight。
| 分类体系 | 主要使用者 | 结构 | 属性模型 | 注意事项 |
|---|---|---|---|---|
| GS1 GPC | 零售和消费品数据交换 | Segment > Family > Class > Brick | 带有定义值的砖块属性 | 是分类,而不是完整的规格模型 |
| ETIM | 技术批发:电气、暖通空调、管道 | 带同义词的类别 | 特征类型为字母数字、逻辑、数值或范围,带单位 | 特征值必须来自该类别的列表 |
| Shopify Standard Product Taxonomy | Shopify 店铺 | 类目层级路径或类目 ID | 每个类目的类目元字段(产品属性) | 在 CSV 中提供层级路径或 ID,不要两者都填 |
| schema.org Product | 面向搜索引擎的结构化数据 | 带属性的单一 Product 类型 | 专用属性;带 unitCode 的 QuantitativeValue | 优先使用具体属性,其次才用 additionalProperty |
处理变体而不重复属性
变体是共享大多数属性、仅在少数属性上不同的产品。将其建模为:父记录保存共享属性,子记录只保存变体维度及随之变化的值,如颜色、尺码、容量及其各自的标识符。GS1 的 GTIN 规则将每种款式、颜色和尺码变化视为带有自己 GTIN 的独立产品,因此标识符始终存在于子记录上。
多型号规格表是大多数变体错误的根源。将每个型号占一列的表格拆分为每列一条记录,并将只印刷了一次、跨列适用的值——合并单元格,或表格下方的“all models: 230 V”——复制到它适用的每个子记录。在 Shopify 中,Option1 LinkedTo CSV 列将变体选项链接到类目元字段;一个产品最多可有三个选项和 2,048 个变体。
通过规则和质量抽样验证属性
验证规则能发现机械性错误:类型错误、单位错误、不可能的值、缺少必填属性。每次导入都运行这些规则,并将失败项转交给审核人员,而不是悄悄丢弃值。
规则无法发现看似合理但错误的值——从相邻型号列复制来的容量可以通过所有检查。质量抽样可以:将抽样记录逐字段与源文件比对。没有通用的样本量或错误阈值;请按风险来设定。
- 按供应商抽取记录样本,并向新供应商和新文档版式倾斜。
- 将每个抽样属性与源文件比对,分别记录匹配、错误值和缺失值。
- 按属性而不是只按记录计算错误率,以找出造成问题的属性或表头映射。
- 对每一条记录(而不是抽样)检查与安全相关和法律要求的属性。
| 规则类型 | 示例 | 失败时的处理 |
|---|---|---|
| 类型和格式 | capacity 必须是小数;gtin 只能是数字 | 拒绝该值,保留原始文本供审核 |
| 范围和合理性 | 水壶容量在 0.1 至 5 L 之间 | 标记为可能的单位或分隔符错误 |
| 枚举成员 | color 必须在基础颜色列表中 | 映射同义词或添加到词汇表 |
| 跨字段 | 最小值 ≤ 最大值;净重 ≤ 毛重 | 标记两个字段 |
| 校验位 | GTIN 通过 GS1 模 10 校验 | 拒绝;从源文件重新读取 |
| 完整性 | 该系列和渠道要求的所有必填属性均已填写 | 阻止发布;向供应商索取数据 |
大规模运行属性标准化
架构、同义词表、词汇表和规则是这项工作中持久的部分;提取方法则可以在它们之下更换。请对它们进行版本管理,为每一项指定负责人,记录手动修正并注明原因(反复出现的修正说明缺少某条规则),并在每次引入新供应商时审查同义词表。
如果您的属性最初来自供应商 PDF,Doc2Shelf 可以完成提取这一步:它读取上传的数据表、规格表、SDS 和目录,按印刷内容保留值和单位,并附上页码和简短引文作为依据,同时标记缺失的必填数据。然后,您的标准化规则会在审核期间应用,之后该记录才会用于生成商品列表或声明草稿。
常见问题解答
- 什么是产品属性?
- 产品属性是描述产品的、带有值的命名特性,例如材质、颜色、容量、尺寸或额定功率。与描述文字不同,它们存放在结构化字段中,因此可以驱动筛选器、规格表、数据源和类目要求。
- 产品属性与变体有什么区别?
- 属性是产品的任何特性。变体是在买家所选的一个或多个属性上有所不同的产品版本,例如尺码或颜色。这些被选择的属性就是变体选项;其余属性在父产品上保持共享。
- 如何从产品描述中提取属性?
- 先定义目标属性和允许值,再把文本拆分成句子,找出候选值,并在分配给某个属性之前,检查每个候选值的限定词、否定和条件。对于仅出现在营销文案中的属性,请对照数据表确认。
- 什么是 UNECE 第 20 号建议书的单位代码?
- 它们是由 UN/CEFACT 发布的、用于国际贸易中计量单位的三字符代码——例如 MTR 表示米,KGM 表示千克,LTR 表示升,WTT 表示瓦。schema.org 的 unitCode 属性使用相同的代码。
- 应该存储原始值还是换算后的值?
- 两者都要。存储标准化的数字和单位代码用于筛选、比较和验证,并保留印刷的原值以便追溯。在导出时换算为各渠道所需的单位,例如 Shopify 产品 CSV 中的重量以克为单位。
- 应该使用哪种产品分类体系:GS1 GPC、ETIM 还是 Shopify 的?
- 使用您的贸易伙伴和渠道所要求的那一种,而且往往不止一种。以您自己的属性架构为主,并维护到各体系的映射:用于零售数据交换的 GPC,用于技术批发的 ETIM,以及用于 Shopify 店铺的 Shopify Standard Product Taxonomy。
- 如何衡量属性提取的质量?
- 将一批提取的记录逐字段与源文件比对,并针对每个属性分别统计正确值、错误值和缺失值。错误值反映精确率问题;缺失值反映召回率问题。请按供应商分别跟踪两者。
- 如何处理多种语言的产品属性?
- 将颜色、材质等枚举值存储为与语言无关的代码并附上翻译后的标签,数字和单位代码则保持与语言无关。自由文本属性需要按语言翻译并审核。
官方来源
本指南所引用的主要法律文本和官方指引。
本指南仅为一般性信息,不构成法律意见。具体要求取决于产品和目标市场;请查阅官方文本,并根据您的实际情况咨询合格的专业人士。