You need to enable JavaScript to run this app. Python用XPath提取Kanjidic2 XML的nanori等读音释义数据问题
优惠活动
大模型
产品
解决方案
定价
更多

Python用XPath提取Kanjidic2 XML的nanori等读音释义数据问题

实现代码

你可以直接基于当前遍历到的reading_meaning节点查询子节点,避免全局XPath路径写错导致匹配不到的问题,示例逻辑如下:

for i in character:
    if i.tag == 'reading_meaning':
        # 初始化存储结构
        ja_on = {}  # 存储音读
        ja_kun = {} # 存储训读
        nanori = {} # 存储名乘
        meanings = {} # 按语言存储释义,key为语言代码,value为释义列表

        # 处理rmgroup下的读音和释义
        rmgroup = i.find('rmgroup')

        # 提取读音
        readings = rmgroup.findall('reading')
        on_idx = 1
        kun_idx = 1
        for rd in readings:
            r_type = rd.get('r_type')
            if r_type == 'ja_on':
                ja_on[f'on_{on_idx}'] = rd.text
                on_idx += 1
            elif r_type == 'ja_kun':
                ja_kun[f'kun_{kun_idx}'] = rd.text
                kun_idx += 1

        # 提取多语言释义
        mean_list = rmgroup.findall('meaning')
        for mean in mean_list:
            # 无m_lang属性的默认是英文释义
            lang = mean.get('m_lang', 'en')
            if lang not in meanings:
                meanings[lang] = []
            meanings[lang].append(mean.text)

        # 提取nanori
        nanori_list = i.findall('nanori')
        nan_idx = 1
        for nan in nanori_list:
            nanori[f'nanori_{nan_idx}'] = nan.text
            nan_idx += 1

空字典问题排查

  • 你之前的写法是每次都从根节点全局查询对应标签,容易因为XPath拼写错误、ID传值错误导致匹配不到节点,直接用当前遍历到的父节点查询子节点稳定性更高
  • 如果你不需要带序号的key,可以直接用列表存储,调用append()方法添加内容即可,更符合常规使用习惯
  • 注意默认英文释义没有m_lang属性,不要漏判这个场景导致英文释义无法存入字典

内容的提问来源于stack exchange,提问作者Juan Camilo Orjuela

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 06:39:03