先给结论:页数变多通常不是关键词变多,而是同一个查询对象在报告里换了“身份”。去重的关键不是删行,而是先确定比较主体,再把同一主体在不同来源、不同粒度下的记录合并。下面用一个假设情境把决策过程走完。
假设你手上有三个来源:一份从查询工具导出的词表、一份从站点后台导出的搜索词记录、一份人工整理的候选清单。合并后报告显示 480 行,但去掉重复后只剩 310 个对象。差的 170 行不是凭空多出来的,而是同一对象以不同写法、不同大小写、不同空格、不同后缀各占一行。常规做法通常是先排序再肉眼删,但这样只能处理完全相同的字符串,处理不了“看起来不一样、其实是同一个对象”的情况。此时真正遗漏的条件是:你没有先定义“什么算同一个对象”。
去重前要回答一个问题:比较的是原始字符串,还是查询意图对应的对象?两种选择成立的条件不同。
判断依据是下一步动作:如果下一步是“提交给执行人员”,就按归一化对象去重;如果下一步是“逐条校验”,就保留原始字符串,另加一列归一化结果用于分组。这个动作会直接影响报告行数:归一化后行数下降,说明之前重复统计的是同一对象;如果行数几乎不变,说明差异来自真实的不同对象,而不是格式问题。
报告页数与对象数量不一致,通常来自以下三类原因,可以用证据区分,而不是靠感觉删。
注意,行数下降本身不能证明去重正确。行数归零也可能只是筛选条件写错,或归一化规则过宽把不同对象合并了。因此每做一次合并,都要抽查若干组,确认被合并的确实是同一对象。
假设你只有一份导出文件和一份人工清单,可以按下面步骤处理,并记录每步后的行数变化。
normalized,写入统一大小写、去首尾空格、统一全半角后的结果。normalized 分组,统计每组行数。组内行数大于 1 的,就是疑似重复。这个流程的结果会影响下一步:如果合并后对象数量稳定,就可以进入优先级排序;如果仍有大量无法解释的重复,说明归一化规则还不够,应先补规则再继续,而不是先删行。
去重不是把报告变短就结束。合并后至少应保留三样信息:原始写法、归一化结果、来源标记。这样后续如果有人质疑某个对象为什么被合并,你能回溯到原始记录。对于粒度不同的对象,保留父子关系比强行合并更有用,因为它同时保留了总量和细分结构。最终报告的对象数量,应当等于你定义的主体数量,而不是等于某一次筛选后的行数。