fix(monitor): 修正偏旁合体映射解析逻辑
问题:解析 unicode_radicals.md 时列索引错误,导致映射表为空 修复: - 正确提取第5列(索引5)作为补充字符 - 修正 parts 数组索引:parts[4]=示例, parts[5]=补充字符 验证: - 构建 45 条合体映射(如 '讠吾'→'语', '亻尔'→'你') - 测试还原:'默讠人'→'默认人', '亻尔'→'你'
This commit is contained in:
+17
-8
@@ -102,19 +102,28 @@ def _load_radical_mapping() -> dict:
|
|||||||
|
|
||||||
返回: {OCR识别的偏旁组合: 正确汉字}
|
返回: {OCR识别的偏旁组合: 正确汉字}
|
||||||
例如: {'讠吾': '语', '亻牛': '件', '彳亍': '行'}
|
例如: {'讠吾': '语', '亻牛': '件', '彳亍': '行'}
|
||||||
|
|
||||||
|
文件格式:
|
||||||
|
| 偏旁 | Unicode | 名称 | 示例 | 补充字符 |
|
||||||
|
|------|---------|------|------|----------|
|
||||||
|
| 亻 | U+4EBB | 单人旁 | 件→亻牛 | 件 |
|
||||||
|
↑ 索引3 ↑ 索引4
|
||||||
"""
|
"""
|
||||||
radical_map = {}
|
radical_map = {}
|
||||||
try:
|
try:
|
||||||
with open(_RADICALS_MD, "r", encoding="utf-8") as f:
|
with open(_RADICALS_MD, "r", encoding="utf-8") as f:
|
||||||
for line in f:
|
for line in f:
|
||||||
if line.startswith("|") and "→" in line:
|
if not line.startswith("|"):
|
||||||
parts = line.split("|")
|
continue
|
||||||
if len(parts) >= 5:
|
parts = [p.strip() for p in line.strip().split("|")]
|
||||||
example = parts[3].strip() # 示例列: 件→亻牛
|
# parts[0] = 空, parts[1] = 偏旁, parts[2] = Unicode,
|
||||||
corrected = parts[4].strip() # 补充字符列: 件
|
# parts[3] = 名称, parts[4] = 示例, parts[5] = 补充字符
|
||||||
if "→" in example and corrected:
|
if len(parts) >= 6 and "→" in parts[4]:
|
||||||
ocr_form = example.split("→")[1].strip()
|
example = parts[4]
|
||||||
radical_map[ocr_form] = corrected
|
corrected = parts[5] if parts[5] else ""
|
||||||
|
if "→" in example and corrected:
|
||||||
|
ocr_form = example.split("→")[1].strip()
|
||||||
|
radical_map[ocr_form] = corrected
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warning(f"[ocr] 加载偏旁合体映射失败({e})")
|
logger.warning(f"[ocr] 加载偏旁合体映射失败({e})")
|
||||||
logger.debug(f"[ocr] 偏旁合体映射: {len(radical_map)} 条")
|
logger.debug(f"[ocr] 偏旁合体映射: {len(radical_map)} 条")
|
||||||
|
|||||||
Reference in New Issue
Block a user