Make Me a Hanzi 数据结构深度解析:从字典到图形完整教程
2026/8/23 15:47:00 网站建设 项目流程

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.txtsvgs派生自阿面科技(Arphic)1999 年以宽松许可发布的文鼎 PL 楷体/楷书字体,其授权全文收录在 APL/zh_CN.UTF-8/ 等目录中。

项目本身采用 LGPL 许可,详见 LGPL 与 COPYING 文件。这也是它能被词典、学习 App 等大量开源客户端复用的原因。

小结:三步用起 Make Me a Hanzi 汉字数据

  1. 查字典信息:按行读取 dictionary.txt,以character为键建立索引,即可取拼音、部首、字源;
  2. 画笔画动画:用character.charCodeAt(0)算出码位,直接加载 svgs/ 中对应的动画 SVG;
  3. 做笔顺教学图:使用 svgs-still/ 的彩色编号静态图,或自行解析strokes+medians渲染自定义动画。

掌握"字典 + 图形"双文件结构后,你就拥有了 9574 个汉字的完整笔顺数据集——从数据到动画,一个文件都少不了。

【免费下载链接】makemeahanziFree, open-source Chinese character data项目地址: https://gitcode.com/gh_mirrors/ma/makemeahanzi

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询