{"_id":"@cubao/naive-pinyin","_rev":"4-d36c3e51e03461d06089d68fc1edbcc8","name":"@cubao/naive-pinyin","dist-tags":{"latest":"0.4.0"},"versions":{"0.1.0":{"name":"@cubao/naive-pinyin","version":"0.1.0","keywords":["pinyin","ime","chinese","shuangpin","ziranma","wasm","webassembly","rime"],"license":"MIT","_id":"@cubao/naive-pinyin@0.1.0","maintainers":[{"name":"dvorak4tzx","email":"dvorak4tzx@gmail.com"}],"homepage":"https://github.com/district10/shouzibilu#readme","bugs":{"url":"https://github.com/district10/shouzibilu/issues"},"dist":{"shasum":"08f108f6ceabd18da5371f232cd43f14b37e316d","tarball":"https://registry.npmjs.org/@cubao/naive-pinyin/-/naive-pinyin-0.1.0.tgz","fileCount":9,"integrity":"sha512-XWK0JbjQHv/2sGLutGz/+oMcq7e4V1AGjucPUEUcWLJ1dtbHfNlKFEkw2qKp24K6buDrq8bunJZaW9+uHSN7tA==","signatures":[{"sig":"MEUCID/pcAcvESEESpV1zY4LzpsmtLQdgKtk0grIqT0TIUqkAiEA3iKPDC5VWr3T5FBWneoxNNCMIB51k8uQhUtOrttLw+c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4645298},"main":"index.js","types":"index.d.ts","exports":{".":"./index.js","./ziranma.json":"./ziranma.json","./naive_pinyin.js":"./naive_pinyin.js","./naive_pinyin.wasm":"./naive_pinyin.wasm","./naive_pinyin.dict.txt":"./naive_pinyin.dict.txt"},"gitHead":"0a04eda08a14badbd1d58a07d74ea4ffa31b2072","_npmUser":{"name":"dvorak4tzx","email":"dvorak4tzx@gmail.com"},"repository":{"url":"git+https://github.com/district10/shouzibilu.git","type":"git"},"_npmVersion":"11.3.0","description":"字母串到汉字候选的精简拼音引擎 (WebAssembly)：全拼/双拼(自然码)/模糊音/整句输入/动态调频/自造词","directories":{},"_nodeVersion":"24.2.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/naive-pinyin_0.1.0_1784350171549_0.4344938699241938","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@cubao/naive-pinyin","version":"0.2.0","keywords":["pinyin","ime","chinese","shuangpin","ziranma","wasm","webassembly","rime"],"license":"MIT","_id":"@cubao/naive-pinyin@0.2.0","maintainers":[{"name":"dvorak4tzx","email":"dvorak4tzx@gmail.com"}],"homepage":"https://github.com/district10/shouzibilu#readme","bugs":{"url":"https://github.com/district10/shouzibilu/issues"},"dist":{"shasum":"a6b21ddf6612d008c63595937a047d0ff6685051","tarball":"https://registry.npmjs.org/@cubao/naive-pinyin/-/naive-pinyin-0.2.0.tgz","fileCount":10,"integrity":"sha512-c7AMf/D0fFGKUa2EDxK233KCHnKiUH3Xko/Hyf3dqQHUwADjJEOHf6AwE7fV1RSJ58oxIdQ56bZ0j3FtTHXwww==","signatures":[{"sig":"MEUCICIvrXTqdbyx9iYOVMCje+SeYFcvflhkXmXNZp/wxHEWAiEAwizsGdKeSHrSLMMMEt+9ZWGlXkyDll5l/HPvWFcw41I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4709110},"main":"index.js","types":"index.d.ts","exports":{".":"./index.js","./ziranma.json":"./ziranma.json","./ime-editor.js":"./ime-editor.js","./naive_pinyin.js":"./naive_pinyin.js","./naive_pinyin.wasm":"./naive_pinyin.wasm","./naive_pinyin.dict.txt":"./naive_pinyin.dict.txt"},"gitHead":"789af9c602e7d26a3498e42215fb6394b4f85e43","_npmUser":{"name":"dvorak4tzx","email":"dvorak4tzx@gmail.com"},"repository":{"url":"git+https://github.com/district10/shouzibilu.git","type":"git"},"_npmVersion":"11.3.0","description":"字母串到汉字候选的精简拼音引擎 (WebAssembly)：全拼/双拼(自然码)/模糊音/整句输入/动态调频/自造词/音节边界；附浏览器 IME 编辑器","directories":{},"_nodeVersion":"24.2.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/naive-pinyin_0.2.0_1784388586536_0.07835809791469339","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@cubao/naive-pinyin","version":"0.3.0","keywords":["pinyin","ime","chinese","shuangpin","ziranma","wasm","webassembly","rime"],"license":"MIT","_id":"@cubao/naive-pinyin@0.3.0","maintainers":[{"name":"dvorak4tzx","email":"dvorak4tzx@gmail.com"}],"homepage":"https://github.com/district10/shouzibilu#readme","bugs":{"url":"https://github.com/district10/shouzibilu/issues"},"dist":{"shasum":"78967a3ed76fd6bfe4c54998db426be1baa678af","tarball":"https://registry.npmjs.org/@cubao/naive-pinyin/-/naive-pinyin-0.3.0.tgz","fileCount":11,"integrity":"sha512-p22xxyOV2pH4SjZ0QQeIIgZ2vZgryXqnkqbW4Kk5dM6E0YbiSr4gf+8mnE9+WgxOFVJYjnqynxHjT/qXwTNnJw==","signatures":[{"sig":"MEUCIQD57SQDn0TyvybOryIttp/Uc6etqfOSEDfQiaSDXIz6UgIgMNxrpEx6Wh/Cnany35M7T33o4pCww6ZTEo+L4UhSyrg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4742003},"main":"index.js","types":"index.d.ts","exports":{".":"./index.js","./ziranma.json":"./ziranma.json","./ime-editor.js":"./ime-editor.js","./naive_pinyin.js":"./naive_pinyin.js","./naive_pinyin.wasm":"./naive_pinyin.wasm","./virtual-keyboard.js":"./virtual-keyboard.js","./naive_pinyin.dict.txt":"./naive_pinyin.dict.txt"},"gitHead":"0885c659fc84740b27d25f69b76caa7f00dc5636","_npmUser":{"name":"dvorak4tzx","email":"dvorak4tzx@gmail.com"},"repository":{"url":"git+https://github.com/district10/shouzibilu.git","type":"git"},"_npmVersion":"11.3.0","description":"字母串到汉字候选的精简拼音引擎 (WebAssembly)：全拼/双拼(自然码)/模糊音/整句输入/动态调频/自造词/音节边界；附浏览器 IME 编辑器","directories":{},"_nodeVersion":"24.2.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/naive-pinyin_0.3.0_1784404787721_0.3176013677281819","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@cubao/naive-pinyin","version":"0.4.0","description":"字母串到汉字候选的精简拼音引擎 (WebAssembly)：全拼/双拼(自然码)/模糊音/整句输入/动态调频/自造词/音节边界；附浏览器 IME 编辑器","main":"index.js","types":"index.d.ts","exports":{".":"./index.js","./ime-editor.js":"./ime-editor.js","./virtual-keyboard.js":"./virtual-keyboard.js","./naive_pinyin.js":"./naive_pinyin.js","./naive_pinyin.wasm":"./naive_pinyin.wasm","./ziranma.json":"./ziranma.json","./naive_pinyin.dict.txt":"./naive_pinyin.dict.txt"},"keywords":["pinyin","ime","chinese","shuangpin","ziranma","wasm","webassembly","rime"],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/district10/shouzibilu.git"},"_id":"@cubao/naive-pinyin@0.4.0","gitHead":"0885c659fc84740b27d25f69b76caa7f00dc5636","bugs":{"url":"https://github.com/district10/shouzibilu/issues"},"homepage":"https://github.com/district10/shouzibilu#readme","_nodeVersion":"24.2.0","_npmVersion":"11.3.0","dist":{"integrity":"sha512-H47tyO63D8KZ30986zdW1qnJMP4WFB5r/zlvMgo4LFR3WKnzu6IScQVn2PqT3lZLV9T/8aN0JIhEd7Sv854BIA==","shasum":"6ffeac3ca9c6399eb22059febf003c385e621756","tarball":"https://registry.npmjs.org/@cubao/naive-pinyin/-/naive-pinyin-0.4.0.tgz","fileCount":11,"unpackedSize":4743132,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD0LZLBEonccjAB/yi3h2InFozsRBUTBmrGTY9bbM/ezAIgNeQ4isScuBmjYVGBxttoXRv9biVbvs4ZIb2NPyaha+8="}]},"_npmUser":{"name":"dvorak4tzx","email":"dvorak4tzx@gmail.com"},"directories":{},"maintainers":[{"name":"dvorak4tzx","email":"dvorak4tzx@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/naive-pinyin_0.4.0_1784455941620_0.06952862749295052"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-18T04:49:31.445Z","modified":"2026-07-19T10:12:21.951Z","0.1.0":"2026-07-18T04:49:31.740Z","0.2.0":"2026-07-18T15:29:46.706Z","0.3.0":"2026-07-18T19:59:47.909Z","0.4.0":"2026-07-19T10:12:21.814Z"},"bugs":{"url":"https://github.com/district10/shouzibilu/issues"},"license":"MIT","homepage":"https://github.com/district10/shouzibilu#readme","keywords":["pinyin","ime","chinese","shuangpin","ziranma","wasm","webassembly","rime"],"repository":{"type":"git","url":"git+https://github.com/district10/shouzibilu.git"},"description":"字母串到汉字候选的精简拼音引擎 (WebAssembly)：全拼/双拼(自然码)/模糊音/整句输入/动态调频/自造词/音节边界；附浏览器 IME 编辑器","maintainers":[{"name":"dvorak4tzx","email":"dvorak4tzx@gmail.com"}],"readme":"# @cubao/naive-pinyin\n\n字母串 → 汉字候选的精简拼音引擎（WebAssembly）。手自笔录项目核心库。\n\n- 全拼 + 双拼（内置自然码码表，任意方案可配）\n- 整句输入：自动音节切分 + DP 最优路径\n- 模糊音（可配）、动态调频、自造词学习\n- wasm 仅 ~160KB，内置精简词库（雾凇拼音 + jieba 词频，4.2MB）\n\n## Node\n\n```js\nconst { createEngine, ziranma } = require(\"@cubao/naive-pinyin\");\n\nconst engine = await createEngine({\n  shuangpin: ziranma.shuangpin,          // 双拼；缺省为全拼\n  fuzzy: [[\"z\", \"zh\"], [\"in\", \"ing\"]],   // 模糊音\n  max_candidates: 10,\n});\n\nengine.query(\"nihkuijx\").candidates[0].text;   // => 你好世界\nengine.query(\"vshwrfmngshego\").candidates[0].text; // => 中华人民共和国\n\n// 动态调频：提交候选分段，下次排序提前\nconst cand = engine.query(\"jinan\").candidates[0];\nengine.commit(cand.segments);\n\n// 自造词\nengine.learnWord(\"tang zhi xiong\", \"唐志雄\");\n\n// 持久化：导出叠加层，下次经 config.user_freq 回传\nconst saved = engine.dumpUser();\nengine.destroy();\n\n// 音节边界（组词光标）：\nengine.segment(\"wodedkdp\");\n// => { input, boundaries: [0,2,4,6,8], path: [0,2,4,6,8] }\n// boundaries = 音节 DAG 全边界（歧义切分的所有边界都可达）；\n// path = 贪心最长边主切分（preedit 分词显示用）。\n```\n\n## 浏览器 IME 编辑器（ime-editor）\n\n包内附 `ime-editor.js`：接管 `<textarea>` 全部键盘输入的完整编辑器——\n物理键/字母双模式（布局表 qwerty/dvorak/dvorak4tzx，可自定义）、\n候选弹窗悬停光标、组词光标学词、动态词（`,date` → 日期）、\n精简 vim（Normal/Insert/Search，operator × motion / text-object）。\n\n```js\nconst { createEngine, ziranma, imeEditor } = require(\"@cubao/naive-pinyin\");\nconst engine = await createEngine({ shuangpin: ziranma.shuangpin });\n// Engine 实例的方法名与编辑器适配器一一对应\nimeEditor.attach(document.querySelector(\"textarea\"), {\n  getEngine: () => engine,\n  layout: \"dvorak4tzx\",     // qwerty | dvorak | dvorak4tzx | 自定义表\n  keyMode: \"physical\",      // physical(e.code+布局表) | letter(e.key)\n  vim: true,\n  mappings: { \",check\": \"✅\",\n              \",date\": \"eval:return new Date().toLocaleDateString('sv')\" },\n});\n```\n\n### 触屏虚拟键盘（virtual-keyboard，可选伴侣）\n\n包内附 `virtual-keyboard.js`：页面底部上拉展开的虚拟键盘，键面随布局表渲染，\n按键经 `ime.sendKey` 注入，与物理键盘完全同一管线。\n六排仿真实键盘布局（含 ANSI 错行）：数字/符号顶部两排直按，左缘功能列\n（\\`~ Tab ESC Shift Ctrl），Shift/Ctrl 为 sticky 单发，中/EN 专用键切换，\n长按 ←/→ = Home/End，👆 长按 = 放大镜拖动光标；双拼方案下可给字母键标注韵母。\n触屏打开时 textarea 置 readonly 屏蔽系统键盘。\n\n```js\nconst { imeEditor, virtualKeyboard } = require(\"@cubao/naive-pinyin\");\nconst ime = imeEditor.attach(document.querySelector(\"textarea\"), { ... });\nconst vkb = virtualKeyboard.attach(ime, document.querySelector(\"textarea\"), {\n  coarse: matchMedia(\"(pointer: coarse)\").matches,   // 触屏时才 readonly/自绘光标\n  getShuangpinFinals: () => null,   // 双拼时返回 {键: [韵母]} 则键面标注（可选）\n});\nvkb.setEnabled(true);   // 显示上拉手柄（vkb.refresh() 可在布局/方案变更后重渲键面）\n```\n\n## 浏览器（bundler）\n\n```js\nimport { createEngine, ziranma } from \"@cubao/naive-pinyin\";\n\nconst dictUrl = new URL(\n  \"@cubao/naive-pinyin/naive_pinyin.dict.txt\", import.meta.url);\nconst dict = await fetch(dictUrl).then(r => r.arrayBuffer());\nconst engine = await createEngine({ shuangpin: ziranma.shuangpin },\n                                  new Uint8Array(dict));\n```\n\n## 说明\n\n- 输入只接受小写字母与 `'`（音节分隔符）；标点、键盘布局、候选 UI\n  都是上层的事，本库只做「字母串 → 候选」。\n- 完整演示：https://district10.github.io/shouzibilu/\n- 源码：https://github.com/district10/shouzibilu\n\n## 许可与署名\n\n- 代码：MIT License\n- 内置词库衍生自 [雾凇拼音 rime-ice](https://github.com/iDvel/rime-ice)\n  （CC-BY 4.0）与 [jieba](https://github.com/fxsjy/jieba) 词典（MIT）\n- 算法受 [librime](https://github.com/rime/librime)（BSD）启发重写\n","readmeFilename":"README.md"}