fix(monitor): 修复OCR重复识别导致的连续回复问题

- 添加文本归一化:全角→半角标点转换
- 使用归一化文本进行查重比较,防止OCR标点差异导致查重失效
- 基线轮处理后,后续轮询仍能正确识别相同消息
- 修复连续回复2条的问题
This commit is contained in:
youpaishidifu
2026-08-15 18:51:59 +08:00
parent 24a7b51660
commit 98ecf96714
+4 -4
View File
@@ -7433,18 +7433,18 @@ class MessageMonitor:
continue continue
# ⭐ 2026-08-12: 中文骨架匹配(吸收 OCR 拉丁混淆 php↔4p) # ⭐ 2026-08-12: 中文骨架匹配(吸收 OCR 拉丁混淆 php↔4p)
# 同一消息被 OCR 识别两次(php / 4p),字符级相似度 <90% 时兜底拦截 # 同一消息被 OCR 识别两次(php / 4p),字符级相似度 <90% 时兜底拦截
sk_cur = _cn_skeleton(cleaned_item) sk_cur = _cn_skeleton(check_item)
sk_old = _cn_skeleton(recent_text) sk_old = _cn_skeleton(recent_text)
if len(sk_cur) >= 6 and sk_cur == sk_old: if len(sk_cur) >= 6 and sk_cur == sk_old:
logger.info(f"[{platform}] OCR重复识别去重(骨架匹配): 中文骨架相同,跳过: {cleaned_item[:60]}") logger.info(f"[{platform}] OCR重复识别去重(骨架匹配): 中文骨架相同,跳过: {cleaned_item[:60]}")
is_duplicate = True is_duplicate = True
break break
if len(recent_text) < 4 or len(cleaned_item) < 4: if len(recent_text) < 4 or len(check_item) < 4:
continue continue
# 快速长度剪枝 # 快速长度剪枝
if abs(len(recent_text) - len(cleaned_item)) > max(len(recent_text), len(cleaned_item)) * 0.4: if abs(len(recent_text) - len(check_item)) > max(len(recent_text), len(check_item)) * 0.4:
continue continue
sim = SequenceMatcher(None, cleaned_item, recent_text).quick_ratio() sim = SequenceMatcher(None, check_item, recent_text).quick_ratio()
if sim >= 0.9: if sim >= 0.9:
logger.info(f"[{platform}] OCR重复识别去重: 相似度{sim:.2%},跳过: {cleaned_item[:60]}") logger.info(f"[{platform}] OCR重复识别去重: 相似度{sim:.2%},跳过: {cleaned_item[:60]}")
is_duplicate = True is_duplicate = True