fix(monitor): 放宽偏旁过滤 + 修复表格提取逻辑
1. 偏旁字符过滤放宽(monitor.py) - 从"包含偏旁字符就丢弃"改为"偏旁字符占比>10%才丢弃" - 修复 OCR 误识别(默讠/亻尔)导致有效消息被丢弃的问题 - 纯偏旁碎片(如⺀⺁⺂⺃⺄⺅⺆⺇⺈⺉⺊)仍会被丢弃 2. 表格提取逻辑修复(auto_reply.py) - 放宽表格行检测:不要求行尾必须有| - 原因:Markdown表格可能未闭合或OCR识别不完整 - 修复公告表格只显示第一行的问题
This commit is contained in:
+6
-1
@@ -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
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user