先把“页数”和“对象数”当成两个独立计数:页数由工具的分页、导出或合并规则决定,对象数由你实际要处理的查询、页面或词条决定。两者不一致时,真正要判断的不是“哪个数字对”,而是重复来自同一对象的多次命中,还是来自不同对象被误合并。处理方向只有三种:保留、改写、退出,选择依据是重复产生的位置。
把报告拆成三层看:查询层、页面层、记录层。查询层重复通常是同一词条因大小写、单复数、空格或标点被拆成多条;页面层重复通常是同一 URL 因带参数、带尾斜杠、http 与 https 并存而被算成多页;记录层重复则是同一行数据在分页或多次导出时被重复写入。三层对应的处理动作不同,混在一起去重会把本来不同的对象误删。
一个可操作的判断:先按对象唯一标识排序,再看相邻行是否只有一两个字段不同。如果只有展示格式不同,属于同对象;如果搜索意图、落地页或语言不同,属于不同对象,不应合并。
当重复行指向同一对象、同一意图,且你后续要按对象汇总指标时,保留一份即可。适用前提是:你只需要对象级结论,不需要保留每个变体的明细。
具体动作:选一个稳定字段作为唯一键,例如规范化后的 URL 或去掉空格和大小写的词条。按这个键分组,保留每组第一条,其余标记为重复。这样做的结果会直接减少后续要处理的行数,让下一步的抽样核对范围变小;如果减少后的对象数仍与预期不符,说明还有合并规则没被识别,需要回到上一层检查。
当两个对象意图或落地页不同,却因为标识规则太粗被算成重复时,应该改写标识,而不是删行。常见前提是:同一词条对应不同地区、不同语言或不同页面类型。
动作是给唯一键补上区分维度,例如在 URL 后附加语言或地区标记,在词条后附加意图标记。改写后重新分组,原本被压掉的对象会重新出现。结果是你得到更接近真实对象数的清单,但代价是后续汇总需要按新维度重新聚合。若改写后数量反而超过预期,通常是把同一对象的多个变体都当成了独立对象,这时应退回保留策略。
如果同一批数据每次导出都产生不同的重复组合,或者分页边界反复变化,说明问题出在导出机制而不是数据本身。此时继续在报告里手工去重,成本会持续上升,且下次导出仍会复发。
退出的前提是:你已经确认对象清单本身稳定,只是报告呈现不稳定。动作是放弃对这份报告的逐行清理,改为只取对象清单和必要指标,其余明细不作为决策依据。结果是后续核对对象数量时不再依赖页数,而是依赖你自己维护的唯一键列表。若对象清单本身也不稳定,那问题在采集或定义阶段,去重只是暂时掩盖。
假设一份报告显示 120 页,每页 10 行,但你预期只有 800 个对象。先不要按 1200 行去重。取前 20 行,按规范化 URL 分组,若得到 18 组,说明重复率约一成,剩余差异可能来自分页重复;若得到 12 组,说明大量行指向同一对象,应优先保留策略;若分组后仍接近 20 组,但对象数预期是 800,则更可能是对象定义本身偏窄,需要改写标识。这个例子只用于说明比较方法,实际比例需按你的数据核对。
无论选择保留、改写还是退出,都保留一份去重前后的对照:唯一键、原始行号、处理动作。这样当对象数再次与报告页数不一致时,你能快速判断是新增了变体,还是导出规则又变了。去重不是把数字凑成一致,而是让每个后续动作都能追溯到具体对象。