# HanziGraph 本站静态适配版

部署路径：`/study/hanzi-map/app/`。所有运行资源均使用相对路径；无需 Firebase、登录、云端数据库、AI 服务或 CDN。

## 功能与边界

- 直接使用固定版本 HanziGraph `graph-functions.js` 的 `buildGraphFromFrequencyList` 构造汉字组词关系，而非空壳外链。
- 关系图支持点击汉字、点击组词连线、拖动、缩放、连线数量切换与 PNG 导出。
- 部件树解析 IDS 左右、上下、三部件和包围结构，递归展开并防止循环。
- 搜索汉字或词语；按 HSK 等级筛选；随机字；浏览器本地收藏；连接本站汉字字典。
- 图中每个汉字保留至多 8 条相邻关系；右侧完整词表独立于该图上限。
- 原项目所有例句、释义、AI 功能、Firebase 模块、账户功能和原版服务工作线程均未发布。
- 此适配版只使用已选取的 HSK 词表，不能当作完整汉语词典。IDS 表示字形结构，不等于字源解释。

## 固定版本与数据许可

完整固定提交、输入文件校验值与过滤策略校验值见 `inputs/provenance.json`。

| 内容 | 固定版本 | 许可及对应源 |
| --- | --- | --- |
| HanziGraph 关系图算法 | `c5caec12cda6f6e6dd6f7feb38b357c4aa11aba5` | MIT；`graph-functions.js` 原样保留；`licenses/HanziGraph-MIT.txt` |
| Cytoscape.js | `3.34.4` | MIT；`vendor/cytoscape.min.js`；`licenses/Cytoscape-MIT.txt` |
| elkmovie/hsk30 / Pleco 词表 | `7f3d4fdcfcb6e826001df062747c943d1fa8160e` | MIT；`inputs/words.json` 是本站选取并规范化的词表；`licenses/HSK30-MIT.txt` |
| cjkvi/cjkvi-ids / CHISE | `86b4d16159f0079437870408f0ca186e529015db` | GPLv2；可修改对应数据源为 `inputs/ids.txt`；`licenses/CJKVI-README.md` 与 `licenses/GPL-2.0.txt` |
| 拼音 | 本站现有 HSK 词条中的拼音字段；经 drkameleon/complete-hsk-vocabulary `7ac65bf1a6387d35f1ade478906172a19311c7f9` 引入 | 署名 CC-CEDICT contributors / MDBG，来源 https://www.mdbg.net/chinese/dictionary?page=cc-cedict ；保守沿用 CC BY-SA 4.0 到拼音富化词表；`licenses/CC-BY-SA-4.0.txt`；未使用英文释义与例句 |
| 本站适配代码 | 此发布目录内源文件 | MIT；`licenses/Adapter-MIT.txt` |

代码与数据许可分别保留；IDS 对应的可修改数据源与转换脚本随应用直接提供。MIT 词表的过滤版允许继续修改与再分发，保留 Pleco 署名。拼音富化词表保守沿用 CC BY-SA 4.0，记录了选取、过滤、规范化的修改；它与独立的 GPLv2 部件数据在 JSON 中分别存放。不得将整个应用所有数据笼统称为 MIT。

## 重建

安装 Node.js 22 或更新版本，不需要 npm 安装依赖。在此源码目录运行：

```powershell
node prepare.mjs C:/path/to/output
```

运行时读取的 `data.json` 会从这里提供的 `inputs/words.json`、`inputs/ids.txt` 以及原样保留的上游关系图算法重新生成。`vendor/` 内带固定渲染器，无需网络。生成目录包含完整源码副本 `source/`、许可证与版本清单。

在本站仓库中，首次生成命令为：

```powershell
node data/interactive-upstream/hanzigraph/snapshot-inputs.mjs
node data/interactive-upstream/hanzigraph/adapter/prepare.mjs
node data/interactive-upstream/hanzigraph/verify.mjs
```

`snapshot-inputs.mjs` 是面向本站数据目录的输入选取程序，仅在需要重新选取词表时运行。它调用本站 `lib/publishing-policy.js` 的 `politicalText` 过滤每个发布词条及部件记录，并固定输入校验值。日常重建不再依赖本站目录或网络。

`dist/` 整体复制到部署路径即可。请通过 HTTP(S) 访问，不要直接以 `file://` 打开，因为浏览器需要读取本地 JSON 资源。
