修复Task #1739:OCR噪声+碎片化关键词导致核心词覆盖率不足
根因: 1. OCR将"定义的,txt"误识别为"定义的 txt",'txt'成为独立token 2. jieba将"版号"切成'版'和'号'(单字词),查询中无完整"版号"词 3. 同义词映射"版号"→["版本号"]未被应用,因为src不在query中 4. 核心词膨胀到4个,要求≥2命中,但文档只命中1个 修复: 1. 添加代码块标记过滤(txt/md/java/py等),防止噪声抬高分母 2. 添加碎片组合扩展:检测相邻单字组合是否在SYNONYMS中 - '版'+'号' → '版本号'(同义词映射"版号"→["版本号"]) - 支持其他类似场景(如"登陆"→"登录") 影响: - 修复OCR噪声导致的误判 - 修复jieba碎片化导致的漏匹配 - 提升对复合词(如版号→版本号)的识别能力 - 不影响正常查询(真实代码文件名仍可通过子串回退匹配)
This commit is contained in:
@@ -186,6 +186,16 @@ class AutoReply:
|
|||||||
for dest in dests:
|
for dest in dests:
|
||||||
# 将同义词变体加入核心词集合(小写化,与_meaningful_tokens一致)
|
# 将同义词变体加入核心词集合(小写化,与_meaningful_tokens一致)
|
||||||
q_mean.add(dest.lower())
|
q_mean.add(dest.lower())
|
||||||
|
# ⭐ Task #1739: 碎片化关键词组合扩展
|
||||||
|
# 当jieba将复合词切成单字时(如"版号"→'版','号'),尝试组合相邻单字匹配同义词
|
||||||
|
# 例:'版'+'号' → '版本号'(同义词映射"版号"→["版本号"])
|
||||||
|
_query_chars = [t for t in jieba.cut(query) if len(t) == 1]
|
||||||
|
for _i in range(len(_query_chars) - 1):
|
||||||
|
_pair = _query_chars[_i] + _query_chars[_i + 1]
|
||||||
|
if _pair in KnowledgeBase.SYNONYMS:
|
||||||
|
for _dest in KnowledgeBase.SYNONYMS[_pair]:
|
||||||
|
q_mean.add(_dest.lower())
|
||||||
|
logger.debug(f"碎片组合扩展: {_pair} → {_dest} (加入q_mean)")
|
||||||
if not q_mean:
|
if not q_mean:
|
||||||
# 极短/纯停用词查询:要求整个 query 子串命中文档
|
# 极短/纯停用词查询:要求整个 query 子串命中文档
|
||||||
stripped = re.sub(r'[??!!。,,\s]', '', query).lower()
|
stripped = re.sub(r'[??!!。,,\s]', '', query).lower()
|
||||||
|
|||||||
Reference in New Issue
Block a user