E2.20.1free-tag duplication and near-duplicates设计
标签输入允许自由创建,需处理重复与相近拼写
别名: 标签去重 · tag synonym · 自由标签重复
概念解释
标签输入(tag input)允许人打一个词就造出一枚标签,不必事先存在于词表。自由创造立刻带来两份脏数据:完全重复(同一字符串打两次)和相近拼写(「交互设计」与「交互式设计」、大小写、空格)。不处理的话,过滤、统计、他人复用都会把它们当成不同对象。它管的是词表如何长脏,不是用逗号还是回车确认,也不是单枚如何删除。
机制
自由创建把命名权交给当场的工作记忆。人不会先搜「我是不是已经打过类似的」,尤其在一长串标签末尾。完全重复是集合语义被当成列表:同一枚出现两次,筛选勾选时行为未定义。相近拼写更阴:对机器是两个 token,对人是同一个意思,云图、计数、别人的自动补全会分裂。大小写、全半角、词序微调都是近邻。若不在创建点上拦截或合并,脏数据会在库里累积,事后清洗要改已经挂在文档上的关系。
边界
故意允许的同义词(检索要同时命中多种叫法)不应被强行合并,但要能链到同一概念。专名大小写有意义(iOS 对 IOS)时,大小写折叠会伤。个人私有标签集很小,重复不致命;全站共享词表里近邻的代价高。机器翻译产生的平行标签是另一类近邻,不能只用编辑距离抓。
怎么落地
- 创建时对已有标签做规范化比较(空白、大小写按产品规则),命中则高亮已有项而不是再插一枚。
- 对编辑距离或词序相近的已有标签给出「你是不是指这个」,让人一键用已有项。
- 共享词表定期把近邻提给治理,不要指望用户每次都记得搜。
- 验证:打一枚已存在的标签、一枚只差一个空格的、一枚大小写不同的。三次都应并入已有项或给出明确选择。静默插出第四枚,词表就在变脏。