fix: OCR捕获bot自身回复菜单触发重复查库(Task #1515)
_is_noise_text(stage级)+逐行过滤新增bot回复菜单模式检测: - 版本标签:(稳定版)(最新开发版)(官方版)等 - checkbox标记:[√][⚠][✗] - md链接格式:[text](url) 防止OCR把屏幕上的bot回复菜单重新识别为新消息触发KB搜索。
This commit is contained in:
+33
@@ -3733,6 +3733,30 @@ class MessageMonitor:
|
||||
except Exception as e:
|
||||
logger.debug(f"[{platform}] OCR 查库过滤异常: {e}")
|
||||
|
||||
# ⭐ Task #1515: bot回复菜单模式过滤
|
||||
# OCR 把屏幕上的 bot 回复菜单(下载选项/checkbox 列表)重新识别为"新消息"。
|
||||
# 典型特征:含版本标签 `(稳定版)` `(最新开发版)` `(官方版)` `(测试版)` 等,
|
||||
# 或含 checkbox 标记 `[√]` `[⚠]` `[✗]`。正常用户聊天从不写这些。
|
||||
_BOT_MENU_LABELS = re.compile(
|
||||
r'\((?:稳定版|最新开发版|官方版|测试版|开发版|正式版|体验版|内测版|公测版|'
|
||||
r'推荐|默认|可选|必选|已选|未选|免费|付费|专业版|企业版|个人版)\)'
|
||||
)
|
||||
if _BOT_MENU_LABELS.search(line):
|
||||
logger.debug(f"[{platform}] OCR 过滤: bot回复菜单(版本标签) line={line!r}")
|
||||
continue
|
||||
# checkbox 标记:[ √ ] [ ⚠ ] [ ✗ ] [ X ] [ √] 等(OCR可能漏空格/括号)
|
||||
if re.search(r'[\[【]\s*[√⚠✗×XvV✓✔]\s*[\]】]', line, re.IGNORECASE):
|
||||
logger.debug(f"[{platform}] OCR 过滤: bot回复菜单(checkbox标记) line={line!r}")
|
||||
continue
|
||||
# 纯 checkbox 行:OCR 把 "[ √ ]" 读成 "√ " 或 "√"(无括号)
|
||||
if re.match(r'^[√⚠✗×]{1,2}\s*$', line):
|
||||
logger.debug(f"[{platform}] OCR 过滤: 纯checkbox符号 line={line!r}")
|
||||
continue
|
||||
# bot 回复中的下载链接格式:[官方下载](url) [bbsmc分流](url) 等
|
||||
if re.search(r'\[.+\]\(https?://.+\)', line):
|
||||
logger.debug(f"[{platform}] OCR 过滤: bot回复(md链接) line={line!r}")
|
||||
continue
|
||||
|
||||
# === 全面 md 语法兜底:正常用户不写 md,只可能是 bot 回复 ===
|
||||
# ** 加粗标记(用户聊天从不打 **)
|
||||
if '**' in line:
|
||||
@@ -5821,6 +5845,15 @@ class MessageMonitor:
|
||||
if any(kw in text for kw in _SECURITY_POPUP_KEYWORDS):
|
||||
logger.debug(f"[ocr] 过滤器2结果: 检测到安全软件弹窗内容,返回True: {text[:60]!r}")
|
||||
return True
|
||||
# ⭐ Task #1515: bot回复菜单内容过滤(stage级)
|
||||
# OCR把屏幕上bot的回复菜单(下载选项列表等)整段识别为文本。
|
||||
# 含版本标签或md链接→高概率bot回复内容,非用户消息。
|
||||
if re.search(r'\((?:稳定版|最新开发版|官方版|测试版|开发版|正式版|体验版|内测版|公测版)\)', text):
|
||||
logger.debug(f"[ocr] 过滤器2结果: 检测到bot回复菜单(版本标签),返回True: {text[:60]!r}")
|
||||
return True
|
||||
if re.search(r'\[.+\]\(https?://.+\)', text):
|
||||
logger.debug(f"[ocr] 过滤器2结果: 检测到bot回复(md链接格式),返回True: {text[:60]!r}")
|
||||
return True
|
||||
# ⭐ Task #1514: OCR病句乱码检测:数字混杂在中文字符间(如"游0由")
|
||||
# OCR把不同区域文字拼接时,数字被嵌入中文字符中间形成乱码。
|
||||
# 正常中文聊天中,数字通常出现在完整数字串(时间戳/数量/版本号)中,
|
||||
|
||||
Reference in New Issue
Block a user