fix(monitor): 放宽偏旁过滤 + 修复表格提取逻辑

1. 偏旁字符过滤放宽(monitor.py)
   - 从"包含偏旁字符就丢弃"改为"偏旁字符占比>10%才丢弃"
   - 修复 OCR 误识别(默讠/亻尔)导致有效消息被丢弃的问题
   - 纯偏旁碎片(如⺀⺁⺂⺃⺄⺅⺆⺇⺈⺉⺊)仍会被丢弃

2. 表格提取逻辑修复(auto_reply.py)
   - 放宽表格行检测:不要求行尾必须有|
   - 原因:Markdown表格可能未闭合或OCR识别不完整
   - 修复公告表格只显示第一行的问题
This commit is contained in:
youpaishidifu
2026-08-14 10:08:41 +08:00
parent 7eaca50a71
commit 3e416c024b
2 changed files with 13 additions and 3 deletions
+6 -1
View File
@@ -397,6 +397,8 @@ class AutoReply:
提取规则:
- 表格块:连续以 `|` 开头且含 ≥2 个 `|` 的行(含表头/分隔/数据行)
⭐ 放宽:只要行首含 `|` 且含 ≥2 个 `|` 就算表格行,不要求行尾必须有 `|`
(避免 OCR 识别不完整或 Markdown 表格未闭合时遗漏数据行)
- 上文:表格前最近 2 个非空行(通常是说明句),给答案提供语境
- 下文:不保留。表格之后的内容往往是下一个话题的开头(如"仪表盘:…"
"商城:…"),保留会重新引入整段无关图文,违背"只返回表格附近的几句话"
@@ -410,7 +412,10 @@ class AutoReply:
table_end = None
for i, ln in enumerate(lines):
s = ln.strip()
if s.startswith('|') and s.endswith('|') and s.count('|') >= 2:
# ⭐ 2026-08-14 修复:放宽表格行检测,不要求行尾必须有 |
# 原因:Markdown 表格可能未闭合(如 `| 2026年6月7日 | 🎮 升级服务器到26.1.2`)
# 或 OCR 识别不完整,导致数据行被误判为非表格行
if '|' in s and s.count('|') >= 2:
if table_start is None:
table_start = i
table_end = i
+7 -2
View File
@@ -3881,8 +3881,13 @@ class MessageMonitor:
# —— OCR 偏旁碎片过滤:包含偏旁字符就丢弃 ——
# 偏旁字符(U+2E80-U+2FDF)在正常中文聊天中不会出现
# OCR 拆字碎片如"亻牛""彡"只要出现就是碎片
if any(_is_radical_char(ch) for ch in line):
logger.debug(f"[{platform}] OCR 过滤: 包含偏旁字符(丢弃) line={line!r}")
# ⭐ 2026-08-14 修复:放宽过滤,仅当偏旁字符占比过高时才丢弃
# 原因:OCR 误识别会把"默认"识别成"默讠"、把"个"识别成"亻尔"
# 这些是单个偏旁的 OCR 噪声,不应因此丢弃整行
# 只有当偏旁字符占比 > 10% 时(真正乱码/碎片)才丢弃
radical_count = sum(1 for ch in line if _is_radical_char(ch))
if radical_count > 0 and radical_count / max(len(line), 1) > 0.1:
logger.debug(f"[{platform}] OCR 过滤: 偏旁字符过多(占比{radical_count/max(len(line),1)*100:.0f}%) line={line!r}")
continue
# —— 系统配置内容过滤:SMTP/邮件地址/代码片段不是用户消息 ——
if re.search(r'@example|smtp|\.py\b|\.bat\b|\.sh\b|//.*\.\w{2,4}\b', line, re.IGNORECASE):