import unicodedata, re
text = unicodedata.normalize('NFKC', raw)
text = re.sub(r'[\u200b-\u200f]', '', text)
评论里连续出现同一个博彩站,内容写成全角字母加零宽字符,关键词库里的词一条都没命中,一晚上进了三百多条。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,过滤前没有做 Unicode 归一化,全角字母、零宽空格和同音字都能绕过。匹配用的还是精确包含,稍微插一个字符就失效。
「关键词过滤绕过」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。
验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。
处理上按这个顺序:入库前统一做兼容性归一化,去掉零宽字符和多余空白;匹配前转小写并去掉标点,再和词库比对;把这次绕过的样本补进词库,加上正则变体。
改完只确认一件事:同一批绕过样本再次提交全部被拦,正常评论不受影响。
