{"id":18654080,"url":"https://github.com/ziqiangwang/zh_cn","last_synced_at":"2025-10-05T13:51:45.362Z","repository":{"id":57405806,"uuid":"133246843","full_name":"ZiQiangWang/zh_CN","owner":"ZiQiangWang","description":"汉字转拼音工具","archived":false,"fork":false,"pushed_at":"2018-06-10T04:34:29.000Z","size":7202,"stargazers_count":12,"open_issues_count":0,"forks_count":5,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-23T07:34:03.115Z","etag":null,"topics":["chinese","lite","pinyin","polyphonic","tiny"],"latest_commit_sha":null,"homepage":"https://ziqiangwang.github.io/zh_CN/demo/index.html","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ZiQiangWang.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-05-13T14:56:45.000Z","updated_at":"2025-03-15T13:02:59.000Z","dependencies_parsed_at":"2022-09-11T23:51:45.750Z","dependency_job_id":null,"html_url":"https://github.com/ZiQiangWang/zh_CN","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZiQiangWang%2Fzh_CN","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZiQiangWang%2Fzh_CN/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZiQiangWang%2Fzh_CN/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZiQiangWang%2Fzh_CN/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ZiQiangWang","download_url":"https://codeload.github.com/ZiQiangWang/zh_CN/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248449694,"owners_count":21105543,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chinese","lite","pinyin","polyphonic","tiny"],"created_at":"2024-11-07T07:13:56.550Z","updated_at":"2025-10-05T13:51:45.297Z","avatar_url":"https://github.com/ZiQiangWang.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# zh_CN\n\n[![NPM version][npm-badge]][npm-url]\n[![Build Status][travis-badge]][travis-url]\n[![NPM downloads][npm-downloads]][npm-url]\n[![Coverage Status][coveralls-badge]][coveralls-url]\n[![gzip](http://img.badgesize.io/https://unpkg.com/zh_cn/dist/zh_cn.min.js?compression=gzip)][unpkg-url]\n\n\n[npm-badge]: https://img.shields.io/npm/v/zh_cn.svg\n[npm-url]: https://www.npmjs.com/package/zh_cn\n[npm-downloads]: https://img.shields.io/npm/dm/zh_cn.svg\n[travis-badge]: https://www.travis-ci.org/ZiQiangWang/zh_CN.svg?branch=master\n[travis-url]: https://www.travis-ci.org/ZiQiangWang/zh_CN\n[unpkg-url]: https://unpkg.com/zh_cn/dist/zh_cn.min.js\n[coveralls-badge]: https://coveralls.io/repos/ZiQiangWang/zh_CN/badge.svg?branch=master\n[coveralls-url]: https://coveralls.io/github/ZiQiangWang/zh_CN\n\n\n汉字转拼音工具，基于开源字典[cc-cedict](https://www.mdbg.net/chinese/dictionary?page=cedict)解析多音字，[例子](https://ziqiangwang.github.io/zh_CN/demo/index.html)\n\n## 特性\n\n+ 基本拼音\n+ 支持多音字精确匹配\n+ 繁体与简体同样支持\n+ 多种拼音风格\n+ 体积小，完整的支持为306KB，gzip压缩后121KB\n+ 速度快，2万字转换大概0.58秒\n\n## 安装\n\n```\nnpm install zh_cn\n```\n\n## 用法\n\n```js\nvar zh = require(\"zh_cn\");\n\nconsole.log(zh(\"重庆\"));    // ['chong', 'qing']\nconsole.log(zh(\"重庆\", {\n  style: zh.STYLE_TONE, // 设置拼音风格\n}));                    // ['chóng', 'qìng']\nconsole.log(zh(\"hello，中国NO.1！\", {\n  only_chinese: true\n}));                       // ['zhong', 'guo']\n```\n\n## 浏览器端\n\n```js\n\u003cscript type=\"text/javascript\" src=\"https://unpkg.com/zh_cn/dist/zh_cn.min.js\"\u003e\u003c/script\u003e\n\u003cscript type=\"text/javascript\"\u003e\n   pinyin.innerText = zh('中文');\n\u003c/script\u003e\n```\n\n\n\n## 拼音风格\n\n### `STYLE_NORMAL`\n\n普通风格，不带声调。\n\n如：`zhong guo`\n\n### `STYLE_TONE`\n\n声调风格，按照正常的汉语拼音标注。\n\n如：`zhōng guó`\n\n### `STYLE_TONE_NUM`\n\n声调风格，使用数字音调\n\n如：`zhong1 guo2`\n\n### `STYLE_FIRST_LETTER`\n\n返回每个字的首字母\n\n如：`z g`\n\n## 原理\n\n多音字功能基于开源词典[cc-cedict](https://www.mdbg.net/chinese/dictionary?page=cedict)，原字典8.9M，包含11万多词条，通过裁剪以及调整搜索策略，多音字词典被压缩到133KB，用于辅助搜索的字典17KB。具体原理如下：\n\n### 字典\n\n一共存在四个字典：\n\n- `tradition.dict.js `常用的繁体字转简体字字典\n- `words.dict.js` 汉字拼音字典，包括Unicode编码从4E00-9FA5范围内除46个异体字（异体字不存在标准拼音）之外的所有汉字\n- `phrases.dict.js`多音词字典，由cc-cedict生成\n- `phrases.dict.map.js`多音词字典辅助查询，保存某个字开头的多音词的长度列表，例如，”重“字，其多音词有”重复“和”重峦叠嶂“，那么会保存 {\"重\": \"24\" }\n\n### 搜索策略\n\n1. 对于待转义的汉字，进行繁简转换，\n2. 遍历待转换的汉字，对每个字去字典`phrases.dict.map.js`中查找，目标文字的位置为i\n3. 如果不存在，则认为不是多音字，直接返回`words.dict.js`字典中该文字的第一个读音，i++\n4. 如果存在，则获取了以目标文字开头的可能的多音词的长度列表`lengthList`,从尾部开始遍历该列表，截取从目标文字位置i开始的长度为len的文字，去`phrases.dict.js`中查找，如果有结果，则返回该结果，并且i+len，继续向后转化，否则，执行步骤3\n\n### 多音词字典裁剪策略\n\ncc-cedict字典8.9M，去除掉无用信息，转化为对象后，还有3M左右。这种尺寸放在服务端可以勉强接受，但是在浏览器端，特别是移动端，一定需要进一步裁剪。\n\n1. 去掉单个字，因为这些信息在`words.dict.js`中已经有了\n2. 如果长度为2或者3的词，则保存到字典repeat中，用以后面对长词和组合词做裁剪\n3. 将类似”一日不见，如隔三秋“这样的词组分割成短词\n4. 将不包含多音字的词去掉\n5. 将包含多音字并且拼音在`words.dict.js`中排第一的词去掉，因为我们的搜索策略在没有多音词结果的情况下，会默认返回第一个读音\n6. 使用保存的短词，裁剪多音词字典中的长词，具体策略为：\n   1. 长度小于3的直接放过，不进行裁剪\n   2. 取目标词的前两个字、前三个字、后两个字、后三个字，检测是否在短词字典repeat中存在\n   3. 如果存在，则将目标词剩下的部分进行判断，如果为多音词则保存到结果，并回到步骤2继续裁剪\n   4. 如果不存在，则从字典中删除该词\n\n## 缺陷\n\n目前不支持轻音，为了裁剪字典尺寸\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fziqiangwang%2Fzh_cn","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fziqiangwang%2Fzh_cn","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fziqiangwang%2Fzh_cn/lists"}