fix(monitor): 修复模糊匹配误删正常文本的严重bug
问题: 单字符昵称'祁'、'爱'等允许1字符编辑距离,导致: - '一'被误识别为'祁'并删除 - '唉'被误识别为'祁'并删除 - '他'被误识别为'祁'并删除 消息内容被严重污染 根因: _fuzzy_find()无长度限制,短昵称的模糊匹配过于宽松 修复: 添加长度保护:只有len(nick) >= 4的昵称才允许模糊匹配 短昵称仍支持精确匹配,但不进行容错 测试验证: ✓ 长昵称OCR误识别:'草原深险' → '草原探险' 正确模糊匹配 ✓ 短昵称精确匹配:'祁' 仍然可以精确匹配删除 ✓ 防误删:'服务器备用电源坏了' 不误匹配 ✓ 防误删:'一'、'唉'、'他'等正常汉字不被删除
This commit is contained in:
+10
-7
@@ -4928,13 +4928,16 @@ class MessageMonitor:
|
||||
break
|
||||
|
||||
# 精确匹配失败,尝试模糊匹配(OCR常见形近字误识别)
|
||||
fuzzy_start = self._fuzzy_find(ts, nick, max_edits=1)
|
||||
if fuzzy_start >= 0:
|
||||
fuzzy_match = ts[fuzzy_start:fuzzy_start + len(nick)]
|
||||
ts = (ts[:fuzzy_start] + ts[fuzzy_start + len(nick):]).lstrip()
|
||||
logger.debug(f"[qq] 模糊匹配剥除OCR误识别昵称 {nick!r} -> {fuzzy_match!r} @ [{fuzzy_start}:{fuzzy_start + len(nick)}]")
|
||||
changed = True
|
||||
break
|
||||
# ⭐ 长度保护:只有长度>=4的昵称才允许模糊匹配,防止单字符昵称误删正常文本
|
||||
# 例:单字符昵称'祁'模糊匹配会把'一'/'唉'/'他'等正常汉字误删
|
||||
if len(nick) >= 4:
|
||||
fuzzy_start = self._fuzzy_find(ts, nick, max_edits=1)
|
||||
if fuzzy_start >= 0:
|
||||
fuzzy_match = ts[fuzzy_start:fuzzy_start + len(nick)]
|
||||
ts = (ts[:fuzzy_start] + ts[fuzzy_start + len(nick):]).lstrip()
|
||||
logger.debug(f"[qq] 模糊匹配剥除OCR误识别昵称 {nick!r} -> {fuzzy_match!r} @ [{fuzzy_start}:{fuzzy_start + len(nick)}]")
|
||||
changed = True
|
||||
break
|
||||
|
||||
# ⭐ 群聊多消息拆分:OCR多条消息拼接时,[头衔]用户名 或 裸昵称 作为分隔符出现在文本中间
|
||||
# 如 "C4炸弹起来准备测试了,[专业皮肤定制] C4炸弹,[专业皮肤定制] C4炸弹,youpaishidifu关于我们"
|
||||
|
||||
Reference in New Issue
Block a user