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