Make Me a Hanzi 数据结构深度解析:从字典到图形完整教程
【免费下载链接】makemeahanziFree, open-source Chinese character data项目地址: https://gitcode.com/gh_mirrors/ma/makemeahanzi
Make Me a Hanzi 是一个免费开源的汉字数据项目,收录了 9000 多个常用简体和繁体汉字的字典数据与笔顺矢量图形数据(共 9574 个字符记录)。它把每个汉字拆成两半来管理:dictionary.txt存放拼音、部首、字形分解、字源等字典信息,graphics.txt存放按笔顺排列的 SVG 笔画路径和中线坐标,让你可以绘制出任何汉字的笔顺动画。本文带你完整读懂这套数据结构。
项目全景:这个开源汉字数据库里有什么?
打开项目目录,你会看到这样一份"数据货架":
| 文件/目录 | 内容 | 说明 |
|---|---|---|
| dictionary.txt | 汉字字典数据 | 每行一个 JSON 对象,含拼音、部首、字源等 |
| graphics.txt | 笔画图形数据 | 每行一个 JSON 对象,含 SVG 路径与中线坐标 |
| svgs/ | 笔顺动画 SVG | 按 Unicode 码位命名,可动效播放 |
| svgs-still/ | 静态彩色笔画 SVG | 每笔不同颜色并标注笔顺数字 |
| stroke_caps/ | 数据维护脚本 | 用于生成与修正图形数据的 Node 脚本 |
| APL/ | 字体许可证文本 | 阿面字库(Arphic PL)的授权说明 |
两个数据文件共9574 行(各 9574 条记录),一一对应、顺序一致——这是理解整个数据设计的关键线索。
读懂 dictionary.txt:字典数据结构逐字段解析
dictionary.txt采用JSON Lines格式:每行一个独立的 JSON 对象,用换行符分隔。随便取一行看看(以"㐌"为例):
{"character":"㐌","pinyin":["yí"],"decomposition":"⿱亻也", "etymology":{"type":"pictophonetic","phonetic":"也","semantic":"亻","hint":"people"}, "radical":"亻","matches":[[0],[0],[1],[1],[1]]}各字段含义如下:
- character(必填):该字形对应的 Unicode 字符,也是连接两个数据文件的"主键"。
- definition(可选):面向二语学习者的英文释义,如 "ice"、"heart; mind; soul"。
- pinyin(必填,可为空):逗号分隔的拼音列表,如
["yí"]。 - decomposition(必填):基于 IDS(表意描述序列)的字形分解,如
⿱亻也表示上下结构。若无法识别的部件会显示为全角问号"?",例如⿰丨?。 - etymology(可为 null):字源信息,
type取值ideographic(会意)、pictographic(象形)或pictophonetic(形声)。形声字会额外给出phonetic(声旁)与semantic(形旁),并附hint解释构字逻辑。 - radical(必填):该字的 Unicode 主部首。
- matches:本字每一笔与分解树中部件笔画的对应关系。例如"㐌"分解为"亻+也",其第 1、2 笔属于左部"亻"(路径
[0]),第 3~5 笔属于右部"也"(路径[1])——这个字段可以帮你可视化标注每个部件在字中的位置。
💡 实用技巧:stats.py 就是基于这些字段写的分析脚本,统计了形声字中声旁出现在左/右两侧的比例,是学习数据结构用法的好范例。
读懂 graphics.txt:笔画图形数据结构详解
graphics.txt与字典文件一一对应,每条记录包含两组核心数据:
strokes(笔画路径):按正确笔顺排列的 SVG 路径数据数组。所有笔画共用1024×1024的坐标系,左上角约在 (0, 900)、右下角约在 (1024, -124)。注意:y 轴向下递减(和常见坐标系相反),因此渲染时需要翻转:
<svg viewBox="0 0 1024 1024"> <g transform="scale(1, -1) translate(0, -900)"> <path d="第1笔的路径数据"></path> <path d="第2笔的路径数据"></path> </g> </svg>medians(笔画中线):与 strokes 等长的列表,每条中线是一串整数坐标对,表示这一笔从起笔到收笔的走向。用它就能做"一笔一画逐步写出汉字"的笔顺动画,效果如下所示。
上手笔顺动画:svgs 与 svgs-still 目录怎么用?
如果你不想自己解析坐标,项目已经为每个字符预生成了 SVG:
- svgs/:每笔带 CSS 动画的"书写过程"SVG,文件名就是字符的Unicode 码位。例如汉字"一"的码位是 19968,对应 19968.svg;"二"是 19969。用 JavaScript 的
charCodeAt(0)就能由任意字符算出文件名,直接<embed>进网页即可播放动画。 - svgs-still/:静态版本,每笔染上不同颜色并标上笔顺编号(1、2、3…),适合做"笔顺图解"而不需要播放动画。它由 stroke_caps/generateStillSvgs.js 从动态 SVG 批量转换而来。
数据维护同样有脚本支撑:stroke_caps/fixStrokes.js 负责修正笔画、stroke_caps/updateGraphicsTxt.js 负责更新 graphics.txt,运行入口是 stroke_caps/run.sh。
数据来源与许可:放心商用的依据
两个数据文件之所以分开存放,是因为来源的许可证不同:
dictionary.txt派生自 Unicode 组织的 Unihan 数据库与 CJKlib 项目;graphics.txt与svgs派生自阿面科技(Arphic)1999 年以宽松许可发布的文鼎 PL 楷体/楷书字体,其授权全文收录在 APL/zh_CN.UTF-8/ 等目录中。
项目本身采用 LGPL 许可,详见 LGPL 与 COPYING 文件。这也是它能被词典、学习 App 等大量开源客户端复用的原因。
小结:三步用起 Make Me a Hanzi 汉字数据
- 查字典信息:按行读取 dictionary.txt,以
character为键建立索引,即可取拼音、部首、字源; - 画笔画动画:用
character.charCodeAt(0)算出码位,直接加载 svgs/ 中对应的动画 SVG; - 做笔顺教学图:使用 svgs-still/ 的彩色编号静态图,或自行解析
strokes+medians渲染自定义动画。
掌握"字典 + 图形"双文件结构后,你就拥有了 9574 个汉字的完整笔顺数据集——从数据到动画,一个文件都少不了。
【免费下载链接】makemeahanziFree, open-source Chinese character data项目地址: https://gitcode.com/gh_mirrors/ma/makemeahanzi
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考