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:
+11
-2
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user