fix: 时间戳过滤器1漏消息——疑问句特征正则过严

_looks_fresh_content 原正则 (疑问词)\s*[??] 只匹配空白不匹配汉字,
导致'如何配置的?'/'在哪可以下载?'等正常疑问句(疑问词与问号间隔文字)匹配失败,
整块OCR文本被静默丢弃('登录插件在哪可以下载?'丢失)。

修复:
1. _looks_fresh_content 改为允许疑问词与问号间 ≤30 字非句末标点(同句内)
2. 最新时间戳≤600s 分支增加 _block_has_cjk_message 兜底放行,与硬截止分支一致

经诊断脚本复现确认:修复前返回False(丢弃),修复后返回True(放行)
This commit is contained in:
youpaishidifu
2026-08-06 16:34:24 +08:00
parent 41436cbe27
commit 4c044c6e7c
+11 -2
View File
@@ -3874,8 +3874,11 @@ class MessageMonitor:
# 超短中文消息(如"好的"、"嗯")可能无时间戳
if len(t) <= 4 and re.search(r'[\u4e00-\u9fff]', t):
return True
# 明确疑问/请求:含疑问词+问号,或"怎么/如何/怎么办"等
if re.search(r'(?:怎么办|为什么|能不能|怎么|如何|什么|哪些|哪个|吗|呢)\s*[??]', t):
# 明确疑问/请求:含疑问词 + 问号,允许中间隔主语/谓语(同一句内,≤30字)
# ⚠ 修复漏消息:旧正则用 \s* 只匹配空白不匹配汉字,导致"如何配置的?"、
# "在哪可以下载?"等正常疑问句(疑问词与问号间隔文字)匹配失败→整块被丢弃。
# 改为允许疑问词与问号间有 ≤30 个非句末标点字符(同句内)。
if re.search(r'(?:怎么办|为什么|能不能|怎么|如何|什么|哪些|哪个|吗|呢)[^。!?\n]{0,30}[??]', t):
return True
if re.search(r'^(?:怎么|如何|请问|请教|求助)', t):
return True
@@ -4123,6 +4126,12 @@ class MessageMonitor:
if self._looks_fresh_content(text):
logger.debug(f"[ocr] 过滤器1结果: 时间戳全过期但最新≤600s且含新鲜特征,放行: {text[:80]!r}")
return True
# ⭐ 兜底:最新时间戳≤600s(屏幕消息流近期有活动)且块内含中文消息内容,
# 也放行给 stage splitting。避免 _looks_fresh_content 因句式识别遗漏导致
# 正常疑问句("如何配置的?"、"在哪可以下载?")被整块静默丢弃。
if self._block_has_cjk_message(normalized):
logger.debug(f"[ocr] 过滤器1结果: 时间戳全过期但最新≤600s且含中文消息内容,兜底放行: {text[:80]!r}")
return True
logger.debug(f"[ocr] 过滤器1结果: 时间戳全过期且无新鲜特征,丢弃: {text[:80]!r}")
return False