添加偏旁碎片过滤器:拦截OCR输出的氵亻讠扌等CJK偏旁部首\n\n根因:OCR识别不完整时会输出CJK偏旁(如氵亻讠扌艹钅等),\n这些不是完整汉字,不应触发查库回复。\n\n修复:\n- OCR级+Poll级双层过滤\n- 检测U+2E80-U+2FDF(CJK Radicals Supplement + Kangxi Radicals)\n- 短文本(≤20字)中偏旁数>=完整CJK数时判定为碎片丢弃

This commit is contained in:
youpaishidifu
2026-07-30 12:32:23 +08:00
parent 43bd80d3b6
commit 18d7880a49
+16
View File
@@ -1854,6 +1854,15 @@ class MessageMonitor:
logger.debug(f"[{platform}] OCR 过滤: 结构化面板 line={line!r}")
continue
# —— OCR 偏旁碎片过滤:氵、亻、讠、扌等 CJK 偏旁不是完整汉字 ——
# CJK 偏旁部首 Unicode: U+2E80-U+2FDF (CJK Radicals Supplement + Kangxi Radicals)
if len(line) <= 20:
radical_cnt = sum(1 for c in line if '\u2e80' <= c <= '\u2fdf')
cjk_cnt = sum(1 for c in line if '\u4e00' <= c <= '\u9fff')
if radical_cnt > 0 and cjk_cnt <= radical_cnt:
logger.debug(f"[{platform}] OCR 过滤: 偏旁碎片(radical={radical_cnt},cjk={cjk_cnt}) line={line!r}")
continue
# —— OCR 短句/病句检测:OCR 把消息"嚼碎"生成碎片 ——
# 通用疑问词(有这些词说明有查询意向,放行)
_q_words = {"什么", "怎么", "如何", "为什么", "吗", "呢", "吧", "能", "可以", "有没有", "哪些", "哪", "哪几个",
@@ -3546,6 +3555,13 @@ class MessageMonitor:
if len(colon_kv) >= 3:
logger.debug(f"[{platform}] Poll过滤: 结构化面板 ts={ts!r}")
continue
# === 偏旁碎片过滤:氵、亻、讠、扌等 CJK 偏旁不是完整汉字 ===
if len(ts) <= 20:
radical_cnt = sum(1 for c in ts if '\u2e80' <= c <= '\u2fdf')
cjk_cnt = sum(1 for c in ts if '\u4e00' <= c <= '\u9fff')
if radical_cnt > 0 and cjk_cnt <= radical_cnt:
logger.debug(f"[{platform}] Poll过滤: 偏旁碎片(radical={radical_cnt},cjk={cjk_cnt}) ts={ts!r}")
continue
# === 游戏UI乱码:CJK+下划线英文、CJK+大写英文组合 → 非聊天文本 ===
if re.search(r'[\u4e00-\u9fff]', ts) and re.search(r'[A-Za-z]', ts) and len(ts) > 10:
if re.search(r'[a-zA-Z]+_[a-zA-Z]+', ts):