fix(monitor): 修正偏旁合体映射解析逻辑

问题:解析 unicode_radicals.md 时列索引错误,导致映射表为空

修复:
- 正确提取第5列(索引5)作为补充字符
- 修正 parts 数组索引:parts[4]=示例, parts[5]=补充字符

验证:
- 构建 45 条合体映射(如 '讠吾'→'语', '亻尔'→'你')
- 测试还原:'默讠人'→'默认人', '亻尔'→'你'
This commit is contained in:
youpaishidifu
2026-08-14 10:19:32 +08:00
parent 8b4542d2f9
commit 0c974d05a9
+14 -5
View File
@@ -102,16 +102,25 @@ def _load_radical_mapping() -> dict:
返回: {OCR识别的偏旁组合: 正确汉字}
例如: {'讠吾': '语', '亻牛': '件', '彳亍': '行'}
文件格式:
| 偏旁 | Unicode | 名称 | 示例 | 补充字符 |
|------|---------|------|------|----------|
| 亻 | U+4EBB | 单人旁 | 件→亻牛 | 件 |
↑ 索引3 ↑ 索引4
"""
radical_map = {}
try:
with open(_RADICALS_MD, "r", encoding="utf-8") as f:
for line in f:
if line.startswith("|") and "→" in line:
parts = line.split("|")
if len(parts) >= 5:
example = parts[3].strip() # 示例列: 件→亻牛
corrected = parts[4].strip() # 补充字符列: 件
if not line.startswith("|"):
continue
parts = [p.strip() for p in line.strip().split("|")]
# parts[0] = 空, parts[1] = 偏旁, parts[2] = Unicode,
# parts[3] = 名称, parts[4] = 示例, parts[5] = 补充字符
if len(parts) >= 6 and "→" in parts[4]:
example = parts[4]
corrected = parts[5] if parts[5] else ""
if "→" in example and corrected:
ocr_form = example.split("→")[1].strip()
radical_map[ocr_form] = corrected