JSZhuyin - JS 注音
Javascript 的"智能"中文注音输入法。Javascript 自动选字注音输入法。演示网页。
目前已知的在线自动选字注音输入法都是将输入发送到服务器,这是已知的第一个完全使用前端技术实现的方案,因此可以支持离线使用。
该库最初是作为 Mozilla Firefox OS - Gaia 的一部分开发的。桌面前端演示最初是在 Gaia 键盘演示 中开发的。
软件许可
MIT 许可
命令行界面
$ npm install --global jszhuyin
...
$ jszhuyin ㄐㄊㄌㄞˊㄒㄧㄝˇㄓㄨˋㄧㄣㄕㄖㄈ
今天来写注音输入法
今天
家庭
交通
具体
检讨
...
从 NodeJS 调用
const { JSZhuyin } = require('jszhuyin');
var jszhuyin = new JSZhuyin();
jszhuyin.load();
var candidates = [];
jszhuyin.oncandidateschange = function(c) {
candidates = c;
};
jszhuyin.handleKey('ㄐㄊㄌㄞˊㄒㄧㄝˇㄓㄨˋㄧㄣㄕㄖㄈ');
console.log(candidates[0][0]); // '今天来写注音输入法'
安装到网站
您可以直接链接 Github 上的文件:
<script type="text/javascript" src="https://jszhuyin.timdream.org/lib/client.js"></script>
<script type="text/javascript" src="https://jszhuyin.timdream.org/lib/web.js"></script>
准备基本的 HTML 元素(分别为待选字的注音,以及候选词),请自行添加适合的 CSS 样式或浮动窗口等:
<p id="composition"></p>
<ol id="candidates"></ol>
使用以下代码启动输入法:
JSZhuyinServerWorkerLoader.prototype.WORKER_URL =
'https://jszhuyin.timdream.org/lib/worker.js';
JSZhuyinClient.prototype.DEFAULT_LOADER = JSZhuyinServerWorkerLoader;
var webIME = new JSZhuyinWebIME({
composition: document.getElementById('composition'),
candidatesList: document.getElementById('candidates')
});
启动完成后,JS 注音将开始处理键盘输入。
虚拟键盘
虚拟键盘可以将用户点击的注音符号传送至 webIME.handleKey(code)
。请确保虚拟键盘不会抢走焦点。
词库
使用 MIT 许可证授权的小麦注音词库,由 mjhsieh 维护,基于 libtabe。
使用前请先执行 npm run grunt data
从 McBopomofo 生成适用于 JSZhuyin 的词库文件。
分词算法
会输出的候选词依次有四种:
- 数据库中,完全匹配输入的注音组合的所有字词
- 完全匹配输入的注音组合的一个组合结果
- 数据库中,只匹配输入的前几个注音组合的所有字词
- 输入错误的第一个音
其中,只有在 (1) 没有找到时才会出现 (2),只有在前面全部都没有找到的情况下才会出现 (4)。
(1) 和 (3) 是直接将注音组合切割成可能的单音组合送到数据库查询(数据库存在另外设计的 Typed Array 数据结构内)。
(2) 比较复杂,但也只是穷举法和积分比较而已(笑)。穷举是使用很简单的 自然数的组合,将单音组合切割成所有可能的单词送到数据库查询和累加积分。积分由小麦注音词库提供。因为组合的结果只会输出一个,且输入新的注音符号时,新的最高分组合候选词一定会包含旧的组合候选词,所以使用了一系列的缓存来加快每个输入的处理速度,而不是穷举所有可能的单词组合再重新排名。
因为是穷举,如果有正确的词库应该可以用于其他的拼音输入法。
为什么示例页面的交互不像正常的桌面智能注音?
因为 JS 注音是手机输入法 :-/