先别急着改分词规则或删除异常词条。无法复现的异常,第一嫌疑通常不是分词工具本身,而是检测和复现两次跑的不是同一份文本。把输入固定下来,再判断异常属于误报还是真问题,比反复重跑更有效。
“无法复现”最常见的成因是输入已经变了。你第一次检测的对象可能来自接口实时返回、数据库当前值或页面上刚渲染的内容,而第二次复现时,文本已经被清洗、截断或转码。两次输入不同,结果自然对不上。
可执行动作:把首次触发异常的那段原文,按字节或按字符原样另存为一个文件,例如 case_raw.txt,不要经过编辑器自动换行或剪贴板处理。然后让分词工具只读这个文件,输出词条和位置。如果这次不再出现异常,说明问题在输入链路,而不是分词逻辑。下一步应去比对两次输入的差异,而不是继续调规则。
检测结果里看到的“异常”,可能已经在三个环节被改动过:分词前的清洗、分词本身、以及结果展示时的截断或排序。要区分它们,可以按下面顺序验证:
假设一段文本里含全角空格,清洗环节把它替换成半角空格,分词结果就会不同。此时异常是清洗规则造成的,不是分词工具误报。这个判断会直接改变下一步:你要改的是清洗配置,而不是分词词典。
如果整段文本无法复现,就把范围缩小。取异常词条前后各若干字符,做成一个最小片段,单独送进分词工具。能复现,说明异常由这段局部文本触发;不能复现,说明它依赖上下文、长度或前后词条的组合。
这一步的结果决定后续动作:
注意,这里的目标不是证明工具错了,而是找到触发条件。触发条件找不到,任何修改都只是碰运气。
同一段文本在不同环境下可能得到不同结果,尤其是词典版本、配置参数或依赖库版本不一致时。复现前先记录:分词工具版本、词典或模型标识、配置项、运行环境,以及输入文本的编码。
如果两次检测分别来自不同机器或不同时间,版本差异就是合理解释之一。此时不要直接判定为误报,而应先在相同版本下重跑。若相同版本仍无法复现,再回到输入差异上排查。这个顺序能避免把版本问题误当成规则问题。
确认是误报后,处理方式不是“忽略它”,而是留下可复查的记录。一条可验收的处理单至少包含:原始输入片段、触发条件、预期切分、实际切分、判定结论、以及是否修改规则。
如果判定为误报且不修改规则,要写明依据,例如“相同输入在相同版本下不再出现,且最小片段无法复现”。如果判定为真问题,则把最小片段加入回归用例,下次调整分词规则时一并验证。这样处理的结果会直接影响下一步:误报被记录后不再重复排查,真问题则进入规则维护流程,而不是停留在一次性的检测报告里。