修复两个OCR过滤bug

1. auto_reply.py: has_meaningful_hit子串回退永远拒绝
   - 根因:q_mean是多字符token集合,set(heading_clean)是单字符集合
   - q_mean & set(heading_clean) 永远为空 → 子串回退永远拒绝
   - 修复:改为 any(kw in full for kw in q_mean) 子串匹配
   - 影响:sdf1_login下载查询(22.18分)被误拒

2. monitor.py: 过去日期时间戳过期整段丢弃
   - 根因:_ocr_text_has_fresh_timestamp返回False时(过期时间戳)
   - 调用方对含中文文本无条件放行 → 昨日旧消息被当作新消息
   - 修复:新增_has_past_date_timestamp方法检测过去日期
   - 调用方:过去日期+时间戳过期 → 整段丢弃
   - 场景:OCR抓到昨天(2026/8/23)的整屏内容被错误放行
This commit is contained in:
youpaishidifu
2026-08-24 10:16:40 +08:00
parent 434a9609bf
commit 0af8c68a73
2 changed files with 39 additions and 1 deletions
+4 -1
View File
@@ -482,7 +482,10 @@ class AutoReply:
# ⭐ 修复:子串回退必须同时满足两个条件:
# 1. 有有意义的子串(≥4字)命中文档
# 2. 至少有一个 meaningful_token 命中文档(防止"服务器"等通用词泛匹配)
has_meaningful_hit = bool(q_mean & (set(heading_clean) | set(title.lower()) | set(body_clean[:800])))
# ⭐ 修复(2026-08-24): 原代码 q_mean & set(heading_clean) 是token集合与
# 单字符集合的交集,多字符token永远不在单字符集合中 → 子串回退永远拒绝。
# 改为子串匹配(与 core_hits 计算方式一致)。
has_meaningful_hit = any(kw in full for kw in q_mean)
if not has_meaningful_hit:
# 没有 meaningful_token 命中,即使有子串匹配也拒绝
logger.debug(f"无有意义token命中拒绝: query={query[:40]!r} doc_heading={heading[:30]!r}")