前言:
最近在做一个AI品牌榜单项目时,遇到了一个看似很小但影响巨大的问题:品牌别名没有合并。

“New Balance”和“新百伦”在采集数据中同时出现,被当成了两个品牌。如果直接出榜单,同一个品牌会出现两次,每个的提及次数都不完整。

一、问题背景

AI回答采集中,品牌名称不统一是常态。

中文名、英文名、简称、俗称——各种写法混着用。

如果不做归一化处理,统计结果会严重失真。

二、问题的影响

影响1:品牌被拆分
同一个品牌被拆成多个条目,每个条目的统计值都不完整。

影响2:排名失真
被拆分的品牌可能出现在榜单位置上,误导读者。

影响3:无法对比
不同时间采集的数据如果别名处理不一致,无法进行趋势对比。

三、解决方案

建立别名映射表:

CREATE TABLE brand_aliases (
    id BIGSERIAL PRIMARY KEY,
    canonical_name VARCHAR(100) NOT NULL,
    alias_name VARCHAR(100) NOT NULL
);

归一化处理:

def normalize_brand(name: str, alias_map: dict) -> str:
    return alias_map.get(name.strip(), name)

四、数据结构设计

采集时保存原始名称和标准化后的名称,便于追溯。

CREATE TABLE brand_mentions (
    id BIGSERIAL PRIMARY KEY,
    sample_id BIGINT NOT NULL,
    raw_name VARCHAR(100) NOT NULL,
    canonical_name VARCHAR(100) NOT NULL
);

五、常见问题与坑点

坑1:别名映射不完整
新的别名不断出现,需要定期review和补充。

坑2:有歧义的简称
“AJ”可能指多个品牌,需要结合上下文判断。

坑3:大小写和空格差异
“NewBalance”和“New Balance”需要统一处理。

六、总结

品牌别名合并看似简单,实则是AI榜单项目中影响最大的细节之一。如果处理不好,榜单结果会直接失真。提前设计好别名映射机制,是保证榜单准确性的基础。