修复行合并导致残片误杀:混合文本后半部分正常查询时放行
This commit is contained in:
+18
@@ -6999,6 +6999,11 @@ class MessageMonitor:
|
||||
# 4. 无动词(判断是否为名词短语)
|
||||
# 5. 无主语(无人称代词)
|
||||
# 放行条件:含疑问词或有问号→可能是用户真问句,不拦截
|
||||
#
|
||||
# ⚠️ 2026-08-20 修复:行合并可能把"残片+正常内容"拼成一条
|
||||
# 例:'个桓温'(残片)+ ')youpaishidifu 关于我们'(正常查询)
|
||||
# → 合并后 '个桓温,关于我们' → 残片检测误杀整条
|
||||
# 处理:若文本含逗号分隔且后半部分含疑问词/动词/主语 → 提取后半部分放行
|
||||
if len(text) <= 10:
|
||||
_has_question_word = any(w in text for w in ('吗', '呢', '多少', '怎么', '如何', '哪', '什么', '几', '?', '?'))
|
||||
_has_verb = any(v in text for v in ('怎么', '如何', '进行', '设置', '配置', '操作', '使用', '打开', '下载', '安装', '登录', '进入', '查看', '查询', '问', '找', '要', '可以', '能', '会', '请', '帮', '给', '有'))
|
||||
@@ -7011,6 +7016,19 @@ class MessageMonitor:
|
||||
if not _common_query and not _ends_with_question:
|
||||
logger.debug(f"[ocr] 过滤器2结果: 检测到OCR残片(无疑问词+无动词/主语),返回True: {text!r}")
|
||||
return True
|
||||
elif ',' in text or ',' in text:
|
||||
# 逗号分隔的混合文本:检查后半部分是否为正常查询
|
||||
# 例:'个桓温,关于我们' → 前半是残片,后半是正常查询
|
||||
_parts = re.split(r'[,,]', text)
|
||||
if len(_parts) >= 2:
|
||||
_second_part = _parts[-1].strip()
|
||||
# 后半部分含疑问词/动词/主语 → 视为正常查询,放行
|
||||
_has_q2 = any(w in _second_part for w in ('吗', '呢', '多少', '怎么', '如何', '哪', '什么', '几', '?', '?'))
|
||||
_has_v2 = any(v in _second_part for v in ('怎么', '如何', '进行', '设置', '配置', '操作', '使用', '打开', '下载', '安装', '登录', '进入', '查看', '查询', '问', '找', '要', '可以', '能', '会', '请', '帮', '给', '有'))
|
||||
_has_s2 = any(s in _second_part for s in ('我', '你', '他', '我们', '你们', '他们', '玩家', '用户', '管理员'))
|
||||
if len(_second_part) >= 3 and (_has_q2 or _has_v2 or _has_s2):
|
||||
logger.debug(f"[ocr] 过滤器2结果: 检测到混合文本(残片+正常查询),提取后半部分放行: {text!r} -> {_second_part!r}")
|
||||
# 放行,但记录日志供后续调试
|
||||
# 括号不匹配(可能OCR截断)
|
||||
# 清理末尾的不完整括号(OCR噪声),如"消息内容['"
|
||||
text_clean = re.sub(r'[\[((]+$', '', text)
|
||||
|
||||
Reference in New Issue
Block a user