汉字拆解原来这么简单:我用 hanzi_chaizi 把“拆字“做成了三行代码

📅 发布时间:2026/8/20 19:26:49
汉字拆解原来这么简单:我用 hanzi_chaizi 把“拆字“做成了三行代码 汉字拆解原来这么简单我用 hanzi_chaizi 把拆字做成了三行代码【免费下载链接】hanzi_chaizi汉字拆字库可以将汉字拆解成偏旁部首在机器学习中作为汉字的字形特征 | Hanzi Decomposition Library allows Chinese characters to be broken down into radicals and components, which can be used as character shape features in machine learning.项目地址: https://gitcode.com/gh_mirrors/ha/hanzi_chaizi我的项目卡在了一个拆字上去年我接了个小活儿给一所小学做汉字识字卡片小程序。需求很简单——点一下赢字页面就要弹出它由哪几个部件组成方便老师拆开讲。当时我以为这事简单找本字典抄一抄不就完事了结果真动手才发现20,000 多个常用字和生僻字一个一个整理不现实去网上爬数据格式乱七八糟还怕版权问题。正发愁的时候我找到了hanzi_chaizi——一个能把汉字拆解成偏旁部首的 Python 库拆完的结果直接就是列表拿到就能用。这篇文章就是我把它落地到真实项目里的完整复盘。一句话说清它的价值它替你完成了汉字 → 基础部件的映射工作。凡是需要把汉字切成偏旁部首的场景——识字教学、字形分析、深度学习里给汉字提取字形特征——它都能在毫秒级返回结果。适合谁做教育产品的人、搞 NLP 的工程师、研究汉字结构的学生还有所有嫌手抄字典麻烦的人。三步装好五行代码跑通安装不用纠结一条命令pip install hanzi_chaizi装完写个最小示例验证一下。我当时拆的第一个字就是赢from hanzi_chaizi import HanziChaizi 拆字器 HanziChaizi() print(拆字器.query(赢))输出[亡, 口, 月, 贝, 凡]五个部件一次到位。整个库对外就一个query方法传进去一个字返回一个部件列表没有第二套复杂的 API 要学。到这里我那个识字卡片的核心功能已经能跑了。实战一给识字卡片做部件提示回到我的项目。老师讲课时的习惯是赢字上面是亡中间是口下面是月贝凡。我要做的就是把这句讲解自动生成出来from hanzi_chaizi import HanziChaizi def 生成讲解(字): 部件 拆字器.query(字) if 部件: return f「{字}」可以拆成{ .join(部件)} return f「{字}」是基础部件拆不了 拆字器 HanziChaizi() for 字 in [赢, 谢, 懂]: print(生成讲解(字))运行结果「赢」可以拆成亡 口 月 贝 凡 「谢」可以拆成言 射 「懂」可以拆成心 董懂拆成心 董正好能解释懂字要用心这种记忆法。这个功能上线后老师反馈说备课省了一大半时间。全程只调用了query没写任何解析逻辑。实战二给 NLP 模型造字形特征后来我把这套库用在了正经的机器学习项目里。做中文 NLP 时一个字光给 Embedding 不够字形信息也很重要——日和曰长得像模型要是能知道这一点效果会更好。思路很简单把一句话里每个字都拆成部件再交给模型from hanzi_chaizi import HanziChaizi def 提取字形特征(文本): 特征 [] for 字 in 文本: # default[字]拆不了的字就退回原字保证序列不中断 特征.append(拆字器.query(字, default[字])) return 特征 拆字器 HanziChaizi() print(提取字形特征(好明))输出[[女, 子], [日, 月]]「好」和「明」都是左右结构、都能拆成两个部件模型拿到的特征天然带上了结构感。字形相似的字得到相似的拆解结果这正是它作为字形特征的价值所在。你没看错核心代码就这么几行剩下的交给模型去学。实战三粗筛字形结构相似的字还有个实用小技巧用拆解结果的长度做粗筛。比如我想在教学里找出和明结构类似的字——都是两个部件组成的那种def 找同类结构(目标字): 目标长度 len(拆字器.query(目标字, default[])) 结果 [] for 候选 in 拆字器.data: # data 是内置的完整拆解字典 if 候选 ! 目标字 and len(拆字器.query(候选, default[])) 目标长度: 结果.append(候选) return 结果[:5] 拆字器 HanziChaizi() print(找同类结构(明))这只是个抛砖引玉的示例别指望它做语义判断——但它说明了一件事HanziChaizi.data把两万多个字的拆解结果全量暴露给你你可以在这上面做任何自定义加工。数据从哪来能不能自己重新生成你可能想问这么多拆解数据靠谱吗它来自開放的「漢語拆字字典」数据采用 CC BY 3.0 许可仓库里同时存了简体chaizi-jt.txt和繁体chaizi-ft.txt两份原始文件。更贴心的是库没有把数据锁死。仓库里有个raw_data/parse.py作用是解析原始文本、生成data.pkl。如果你想更新数据或加自己的拆解规则改完原始文件后跑一句就行uv run python raw_data/parse.py生成完会打印总字数。我本地实测覆盖了20,466个汉字日常使用完全够。想深度定制的同学仓库里还有develop.md开发指南配合make dev、make test、make format这些命令改起来很顺。四个坑我提前帮你踩过了用的时候这几个细节最容易让人困惑提前知道能少走弯路。1. 查不到的字返回什么直接query一个不存在的字符返回的是None不是空列表。记得传default[]或default[字]否则下游代码容易炸。这是全库最容易踩的坑。2. 有些字就是拆不了。「一」「又」「木」「骨」这类基础部件没有拆解结果属于正常现象。仓库里的non_decomposable.txt列出了全部这类字教学场景里可以直接拿它当不可再分名单。3. 拆解结果里会出现奇怪字符。拆「农」「表」「衣」「囊」时结果里有个\uf7ee是 Unicode 私有区的字符代表衣字下半部分撇捺结构标准字库里没有独立编码。显示成乱码别慌它不是 bug。比如「衣」拆出来是[丶, 一, \uf7ee]。4. 拆解不是唯一正确答案。同一个字可能有多套拆法query只返回第一套。做教研时如果觉得某一套拆法不合适直接拿data字典改即可。接下来轮到你了说到底这个库做的就是把查字典这件事自动化两万多汉字的部件映射装好即用、零第三方依赖、纯 Python 实现几行代码就能接入你的项目。不管是给教学工具加个拆字功能还是给模型喂字形特征它都能帮你省下大把整理数据的时间。想立刻上手的话直接安装并跑通上面的最小示例想改源码或者重新生成数据把仓库克隆下来git clone https://gitcode.com/gh_mirrors/ha/hanzi_chaizi照着develop.md走一遍make dev就能开始折腾。欢迎你把它用到自己的项目里如果发现了新玩法也记得回来说一声 【免费下载链接】hanzi_chaizi汉字拆字库可以将汉字拆解成偏旁部首在机器学习中作为汉字的字形特征 | Hanzi Decomposition Library allows Chinese characters to be broken down into radicals and components, which can be used as character shape features in machine learning.项目地址: https://gitcode.com/gh_mirrors/ha/hanzi_chaizi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考