添加偏旁碎片过滤器:拦截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:
+16
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user