修复Task #1739:OCR噪声导致核心词覆盖率不足
根因:
- OCR将"定义的,txt"误识别为"定义的 txt"
- 'txt'作为3字符ASCII词未被现有过滤排除(只过滤≤2字符)
- 核心词从3个变成4个,命中率从3/3→1/4,低于阈值2被拒绝
修复:
- 添加常见代码块标记过滤列表{'txt','md','java','py','js','json',...}
- 这些标记通常是OCR噪声或文档格式标识,不应作为查询核心词
- 过滤后核心词恢复为{'登录','定义','问问'},命中率3/3通过检查
影响:
- 修复OCR噪声导致的核心词膨胀问题
- 避免因无效token导致命中率不足而拒绝正确答案
- 不影响正常查询(真实代码文件名仍可通过子串回退匹配)
This commit is contained in:
@@ -427,6 +427,11 @@ class AutoReply:
|
|||||||
# ⭐ OCR碎片过滤:纯ASCII且≤2字符的词(如"丿IJ"切成'ij')是OCR噪声
|
# ⭐ OCR碎片过滤:纯ASCII且≤2字符的词(如"丿IJ"切成'ij')是OCR噪声
|
||||||
# 不参与核心词覆盖判定——否则垃圾词抬高分母,真核心词反而达不到阈值
|
# 不参与核心词覆盖判定——否则垃圾词抬高分母,真核心词反而达不到阈值
|
||||||
core_kw = {kw for kw in core_kw if not (kw.isascii() and len(kw) <= 2)}
|
core_kw = {kw for kw in core_kw if not (kw.isascii() and len(kw) <= 2)}
|
||||||
|
# ⭐ Task #1739: 过滤常见代码块标记(如'txt'、'md'、'java'等)
|
||||||
|
# 根因:OCR将"定义的,txt"误识别为"定义的 txt",导致'txt'成为独立token
|
||||||
|
# 解决:将常见代码扩展名加入过滤列表,避免抬高分母影响命中率计算
|
||||||
|
_CODE_BLOCK_MARKERS = {'txt', 'md', 'java', 'py', 'js', 'json', 'xml', 'html', 'css', 'bat', 'sh', 'yml', 'yaml', 'cfg', 'ini', 'log', 'csv', 'sql', 'cpp', 'c', 'h'}
|
||||||
|
core_kw = {kw for kw in core_kw if kw.lower() not in _CODE_BLOCK_MARKERS}
|
||||||
# ⭐ 使用body_no_links进行核心词匹配,排除链接文本干扰
|
# ⭐ 使用body_no_links进行核心词匹配,排除链接文本干扰
|
||||||
# 防止php.md的"[sdf1插件](sdf1.md)"链接文本被误判为内容关键词
|
# 防止php.md的"[sdf1插件](sdf1.md)"链接文本被误判为内容关键词
|
||||||
doc_text = heading_clean + " " + title.lower() + " " + body_no_links[:800]
|
doc_text = heading_clean + " " + title.lower() + " " + body_no_links[:800]
|
||||||
|
|||||||
Reference in New Issue
Block a user