# 词库来源与覆盖范围

## Windows 0.2.1 扩展输入词库

Windows 原生版单独使用 `data/windows/mandarin.json` 与 `data/windows/cantonese.json`，不把扩大后的词库强行载入网页或手机键盘。`python scripts/build-windows-lexicon.py --offline` 从经 SHA-256 校验的固定缓存重建；`python scripts/build-windows-data.py` 生成两个离线索引。逐来源校验值见 `data/windows/sources.lock.json`，实际数量和拒绝计数见该目录 `manifest.json`。

- 普通话合并基础词库、`mozillazg/pinyin-data` 提交 `9193766130af24d2ac54230be979b2e98ac66223` 的完整有效汉字读音（包含扩展平面、多音字），以及 `mozillazg/phrase-pinyin-data` 提交 `cee0ed6e6e4898580cafd2bd5e3723e20b214aa0` 的 `large_pinyin.txt` 显式词音。仅保留词形与拼音，不导入词典解释正文。MIT 和 Unicode 来源通知继续保留；上游混合来源限制仍适用。
- 粤语来自粵語計算語言學基礎建設組 **CanCLID / Rime Cantonese contributors** 维护的 [rime/rime-cantonese](https://github.com/rime/rime-cantonese/tree/259f0e48bba840c3a2e0d117539e96937f3d89bc)，固定提交 `259f0e48bba840c3a2e0d117539e96937f3d89bc`，使用 `jyut6ping3.chars.dict.yaml` 与 `jyut6ping3.words.dict.yaml`，依照 [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) 再分发，许可原文见 `licenses/rime-cantonese-CC-BY-4.0.txt`。
- 对粤语数据所作改动：去掉声调数字用于无调粤拼输入，保留音节分界，合并同词同无调读音，生成稳定标识与自有索引。来源百分比只作小幅排序权重，不冒称统计词频。未导入 ODbL 的 maps 文件，也未从无读音的 phrase 文件猜测读音。
- `data/windows/cantonese-curated.tsv` 补充本项目选定的常用问候、感谢、地点及产品词形和读音；例如“你好”的整词读音是 `nei hou`。此表不包含词典释义或例句，排序权重由本项目设置，摘要独立记录在 manifest。已有来源中的同词读音会合并，不重复计算。
- 当前输入组合长度最多 64 个字母。非汉字、音节数不符、异常拼写及超过输入长度的来源记录在 manifest 中分别计数，不会静默假装全部录入。完整汉字读音取决于所选来源覆盖，**不是《中华大字典》或某本粤语大字典原书全文，也不保证全部历史异读或全部地方读音**。

### 0.2.1 单字常用度排序

此修订只调整已有单字读音的排序权重，不增删词形、读音或生僻字；普通话仍为 465,323 条词音、44,365 个汉字，粤语仍为 134,266 条词音、26,983 个汉字。`readingInventories` 锁定不含权重的完整词音清单摘要，重建时逐一验证。

- 新来源为 Unicode, Inc. 发布的固定 [Unicode 15.1.0 Unihan.zip](https://www.unicode.org/Public/15.1.0/ucd/Unihan.zip)，SHA-256 为 `a0226610e324bcf784ac380e11f4cbf533ee1e6b3d028b0991bf8c0dc3f85853`。仅解析 `kHanyuPinlu` 与 `kFrequency`，不导入其中的解释或新增读音。使用 [Unicode License V3](licenses/unicode-unihan.txt)；许可文本的下载地址与摘要也记录在 Windows 来源锁中。
- [UAX #38 修订 35](https://www.unicode.org/reports/tr38/tr38-35.html) 将 `kHanyuPinlu` 定义为普通话字音及出现频次。对同字同无调拼音，先合计不同声调的来源次数，再使用 `max(原权重, 2000 + 10 × 次数)`。例如“牛”的 `niú(270)` 得到 4700，“纽”的 `niǔ(26)` 得到 2260；这是一致应用于全部匹配读音的公式，没有针对“牛”设置例外。
- 同一固定版本保留的 `kFrequency` 是从传统中文 USENET 书面文本估计的 1–5 级字形常用度，1 最常见。**它不是粤语读音频率，也不是现代实时词频。** 没有匹配普通话逐音次数时，用 `max(原权重, 200 × (6 − 等级) + min(原权重, 199))` 作为较弱的后备排序。粤语只使用这一字形等级，绝不套用普通话逐音次数；来源中的粤语读音保持原样。
- 未被这两项属性覆盖的字音保留原权重；普通词、人工整理的粤语词组以及全部读音清单保持不变。`kHanyuPinlu` 覆盖 3,799 字，`kFrequency` 覆盖 5,089 字，并不覆盖本输入法全部生僻字。实际调整的普通话读音为 7,266 条，粤语为 5,382 条，详见 manifest 的 `ranking`。
- 权重是基于历史公开语料的排序先验。上下文可继续改变候选顺序；同音字没有在所有语境下都正确的固定首选。比如“花”会出现在 `hua` 首屏，但不能据此承诺它永远应排在“话”前面。

下文描述仍供网页及手机端使用的基础词库；它与上面的 Windows 扩展库分别统计。

本版本是可离线运行的开发预览词库，包含有规模的成语、普通话词音与汉字数据，以及人工整理的地域口语、网络用语、谚语、惯用语和歇后语示例。**不宣称“中国成语大全”“全部俚语”“所有方言”或网络用语全集。** 词数和类别以 `manifest.json` 的实际构建结果为准；一种词的多个读音算作多条词音记录，`uniqueTexts` 为不同词形数。

## 可复现构建

在项目根目录使用 Node.js 20 或更高版本执行：

```sh
node scripts/build-lexicon.mjs
```

首次执行按 `sources.lock.json` 的固定 Git 提交下载三份原始数据至 `.cache/lexicon/`，核对 SHA-256 后进行转换。原始缓存不随应用交付。以后可执行 `node scripts/build-lexicon.mjs --offline`，仅使用已缓存的数据。应用运行本身无需下载词库；发布时直接使用已生成的 `lexicon.json`。相同源码、整理表和固定输入会生成字节一致的词库及清单。`generatedAt` 是固定的数据快照时间，不是运行脚本的实时日期。

1. 先读 `curated.tsv`，这些条目拥有最高优先级。
2. 导入成语数据的词形和读音，**丢弃源文件的解释、出处和例句**。
3. 导入词语拼音和基本汉字区 U+4E00–U+9FFF、〇 的普通话读音。
4. 转为小写无声调拼音，`ü` 键盘拼写为 `v`，保留音节间空格。
5. 根据固定汉字数据的音节表检查拼音，并对导入成语进行逐字读音交叉检查。若成语源拼音可疑，仅在固定词语源有同一词形的可验证读音时恢复，并标记“拼音交叉校订”；其余过滤。过滤不合法的拼音、缺少汉字或音节数与汉字数不符的条目；按“词形 + 拼音”去重，保留优先来源；同一词形的不同读音保留。交叉检查可能排除少量词音表未收录的历史异读，并不代表专家级校订。
6. 导出稳定标识符、排序权重、来源及可选的原创释义、地域、标签。清单记录分类数量、词形数量、地域数量、过滤计数、文件 SHA-256 与字节数。

`frequency` 是为原型设置的人工排序权重，**不是经过语言语料统计得到的词频**。常用字词的优先级高于普通导入词，来源数据内的罕见读音仍可检索。成语等类别交叉时，一条词音记录只保留一个主分类，因此各类计数可相加。

## 固定来源

| 来源 | 使用内容 | 固定提交 | 许可记录 |
| --- | --- | --- | --- |
| [pwxcoo/chinese-xinhua](https://github.com/pwxcoo/chinese-xinhua) | `data/idiom.json` 中的 `word`、`pinyin` | `fe6d6c2e8baa82187f4c96bbe042e43f96c05666` | [MIT 声明](licenses/pwxcoo-chinese-xinhua.txt) |
| [mozillazg/phrase-pinyin-data](https://github.com/mozillazg/phrase-pinyin-data) | `pinyin.txt`；没有导入 `large_pinyin.txt` 或词典释义 | `cee0ed6e6e4898580cafd2bd5e3723e20b214aa0` | [MIT 声明](licenses/mozillazg-phrase-pinyin-data.txt) |
| [mozillazg/pinyin-data](https://github.com/mozillazg/pinyin-data) | `pinyin.txt` 中上述基本汉字区的普通话读音 | `9193766130af24d2ac54230be979b2e98ac66223` | [MIT 声明](licenses/mozillazg-pinyin-data.txt) 与 [Unicode 数据许可](licenses/Unicode-3.0.txt) |
| 宇宙输入法原创整理 | `curated.tsv` 中人工选择的常用词、传统表达及原创简释 | 随本项目版本控制；清单记录 SHA-256 | 本项目原创内容，不转授上游不明权利 |

上游的许可证文件已按固定提交保存。Unicode 许可文本来自 [Unicode 官方许可页](https://www.unicode.org/license.txt)，用于保留汉字数据所列 Unihan 参考来源的通知。完整源文件 URL 和 SHA-256 见 `sources.lock.json` 与 `manifest.json`。

## 数据来源的限制

三个 Git 仓库都提供 MIT 许可声明，但不能把该声明理解为已经替所有原始资料完成授权审查。

- `chinese-xinhua` 的 [固定版本说明](https://github.com/pwxcoo/chinese-xinhua/blob/fe6d6c2e8baa82187f4c96bbe042e43f96c05666/README.md#copyright) 明确说明其数据来自网上汇集。本项目只提取词形与拼音，不复制解释性段落；这减少了复制范围，但不构成对全部来源权利的保证。
- `phrase-pinyin-data` 的 [固定版本说明](https://github.com/mozillazg/phrase-pinyin-data/blob/cee0ed6e6e4898580cafd2bd5e3723e20b214aa0/README.md) 列出原始词音表及多个网站、词典、CC-CEDICT 等参考来源。当前仅使用基础 `pinyin.txt`，没有将扩展文件整体合入。
- `pinyin-data` 的 [固定版本说明](https://github.com/mozillazg/pinyin-data/blob/9193766130af24d2ac54230be979b2e98ac66223/README.md) 说明包含 Unicode Unihan 及其他参考来源。本项目保留项目与 Unicode 许可通知，但尚未对每一个读音逐条做来源追溯。

**公开商业发布前，应完成原始来源逐项核验、取得需要的授权，或替换为权利链明确的可发布词库。** 目前的通知保留是开发交付的一部分，不代表已经完成法律审核。该限制也适用于由本数据生成的 Rime 词典及其他导出格式。

## 地域、网络和语义标注

地域标签是便于查找的**代表性使用范围**，不是唯一使用地区，也不是方言学边界。条目覆盖东北、北京、天津、山东、河南、陕西、川渝、沪苏浙、粤港澳、闽台、湖北、湖南的有限示例；广泛通用的词会标注“多地通用”。部分写法是模仿口音的常见汉字写法，已作标注。

所有地域词都使用汉字的**普通话检索读音**。例如“唔该”可通过 `wu gai` 搜索，这不是粤拼或粤语发音；“歹势”的 `dai shi` 也不是闽南语罗马字。本版本不提供真实方言音系、方言语音识别或各地读音转换。儿化词为了逐字检索保留 `er` 音节。

网络词的含义取决于语境、群体和时期，并可能带反讽。“社恐”等词按网络口语释义，不作为医学诊断。传统俗语、歇后语包含夸张和比喻，释义是语言说明，不代表普遍事实或行为建议。原创简释优先用简洁中性文字说明常见用法；未做专家级逐词审校，欢迎通过维护 `curated.tsv` 修订。

## 交付文件

- `lexicon.json`：应用和导出器直接使用的离线词音记录。
- `manifest.json`：真实数量、覆盖说明、来源与校验结果。
- `curated.tsv`：可审阅、可维护的原创词库增强表。
- `sources.lock.json`：可复现下载所用的提交与摘要。
- `licenses/`：需要随再分发保留的第三方通知。

版权与应用代码的其他依赖另见项目根目录 `THIRD_PARTY_NOTICES.md`。
