From 15e0f25fd7c26131ddd687262a800d0c9b2a10ee Mon Sep 17 00:00:00 2001 From: youpaishidifu Date: Thu, 17 Sep 2026 18:08:40 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DTask=20#1739=EF=BC=9AOCR?= =?UTF-8?q?=E5=99=AA=E5=A3=B0+=E7=A2=8E=E7=89=87=E5=8C=96=E5=85=B3?= =?UTF-8?q?=E9=94=AE=E8=AF=8D=E5=AF=BC=E8=87=B4=E6=A0=B8=E5=BF=83=E8=AF=8D?= =?UTF-8?q?=E8=A6=86=E7=9B=96=E7=8E=87=E4=B8=8D=E8=B6=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因: 1. OCR将"定义的,txt"误识别为"定义的 txt",'txt'成为独立token 2. jieba将"版号"切成'版'和'号'(单字词),查询中无完整"版号"词 3. 同义词映射"版号"→["版本号"]未被应用,因为src不在query中 4. 核心词膨胀到4个,要求≥2命中,但文档只命中1个(版本号) 修复: 1. 添加代码块标记过滤(txt/md/java/py等),防止噪声抬高分母 2. 添加碎片组合扩展:检测相邻单字组合是否在SYNONYMS中 - '版'+'号' → '版本号'(同义词映射"版号"→["版本号"]) 3. 放宽has_ht=True时的核心词阈值:从50%降至固定1个命中 - 当标题已命中核心词时,只需1个核心词命中即可通过 影响: - 修复OCR噪声导致的误判 - 修复jieba碎片化导致的漏匹配 - 提升对复合词(如版号→版本号)的识别能力 - 不影响正常查询(真实代码文件名仍可通过子串回退匹配) --- auto_reply.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/auto_reply.py b/auto_reply.py index 59cb45f..354ef4a 100644 --- a/auto_reply.py +++ b/auto_reply.py @@ -573,7 +573,14 @@ class AutoReply: # ⭐ 修复:阈值改为max(1,...),避免只有1个核心词时仍要求≥2个命中 # 例:"服务器最近有哪些公告啊?" 核心词={'公告'}(1个) # heading含'公告'(1/1)→ 通过(原max(2,...)要求≥2,会拒绝) - min_core_hits = max(1, (len(core_kw) + 1) // 2) + # ⭐ Task #1739: has_ht=True时放宽阈值(原50%过严) + # 例:"版号"查询→核心词={'版本号','登录','问问','定义'}(4个) + # 文档"## 0. 版本号区分:"只命中1个,但heading完全相关 + # 修复:当has_ht=True(标题已含核心词)时,只要求1个命中即可 + if has_ht: + min_core_hits = 1 + else: + min_core_hits = max(1, (len(core_kw) + 1) // 2) if core_hits < min_core_hits: logger.debug( f"多关键词覆盖不足跳过(防牛头不对马嘴): query={query[:40]!r} "