双拼 (自然码) 的简单实现 |
您所在的位置:网站首页 › 简体中文全拼和双拼哪个好 › 双拼 (自然码) 的简单实现 |
拼音输入法大致可以分为 2 种: 全拼 和 双拼. 全拼很好理解, 就是输入完整的拼音, 比如 qiong. 但是, 这好像有点太长了啊 ? 输入一个拼音居然需要击键 5 次 ! 如果对于同样的拼音, 可以只输入 qs 就好了, 只需要击键 2 次. 这就是双拼, 对于每一个拼音都只需要击键 2 次. 相关文章: + 《从 Unicode 标准提取拼音数据》 https://www.bilibili.com/read/cv31310500/ 目录+ 1 双拼 (自然码) 简介 + 2 实现双拼表 + 3 验证双拼表 + 4 总结与展望 + 附录 1 完整代码 + 附录 2 全拼表 (408 个) + 附录 3 双拼表 (自然码) 1 双拼 (自然码) 简介我们先来复习一下小学知识: 一个汉语拼音一般由 2 部分组成, 声母 和 韵母. (普通话) 声母大约有 23 个, 韵母大约有 34 个. 一个键盘按键对应一个 声母 / 韵母 差不多是可行的. 双拼的一个拼音对应 2 个按键, 一般是第一个按键表示声母, 第二个按键表示韵母. 但是具体如何对应, 哪个按键对应哪个韵母, 就有不同的设计了. 所以存在很多种不同的双拼方案. 本文介绍的 自然码 只是其中一种. 这些不同的双拼方案之间在效果上并没有显著的区别, 选择一种自己喜欢的即可. 自然码是上个世纪就已经出现的古老方案. 窝选择自然码的主要理由是, 各平台对自然码的支持比较广泛, 基本上到哪里都是开箱即用, 比较方便. 同时窝觉得自然码的设计也比较合理. 由于存在很多种不同的双拼方案, 输入法不应该替用户做选择. 一种比较好的实现方式是, 把双拼做成一个 双拼表, 根据用户的输入, 查表得到对应的全拼: 这样只需要替换不同的双拼表, 即可支持不同的双拼方案. 理论上可以支持任意一种双拼方案. 2 实现双拼表首先, 我们需要一个全拼表 (详见 附录 2), 就是列出所有全拼 (不带声调): 其中有几个比较有意思的拼音: + (1) ng 这是啥情况 ? 怎么好像和小时候学的不太一样啊 .. . (曝露年龄系列) 又找到了点熟悉的感觉. 此处的拼音数据来自于 Unihan_Readings.txt (详见 《从 Unicode 标准提取拼音数据》) kTGHZ2013. 也就是 《通用规范汉字表》 (2013 年) 对应的数据. + (2) hng 这个特殊的拼音也是只用于一个汉字. + (3) m 这个之前也没见过. 首先定义双拼规则 (自然码), 也就是原始输入和声母, 韵母的对应关系. 为了便于查找, 对这些数据进行一些转换. 对声母和韵母 (原始输入) 进行组合, 并转换成全拼. 然后查找组合出来的全拼是否在全拼表里, 否则就是无效拼音. 因为不是每一种声母和韵母的组合都有汉字使用. 零声母就是没有声母, 只有韵母的拼音, 比如 a, o, e 这种. 自然码的规则是, 输入两次, 比如 aa 表示 a. 这也是自然码的规则, 如果全拼只有 2 个字母, 那么双拼和全拼保持一致. 此处跳过特殊拼音 ng. 最后再补充几个特殊拼音, 比如输入 oh 表示 ang. 3 验证双拼表上面生成的双拼表, 先别急着使用, 检查一下. 这里主要验证两条规则: + 每一种输出都是有效的全拼: 就是防止出现无效的拼音. + 双拼覆盖了所有的全拼: 重点是这一条, 保证生成的双拼方案, 可以输入所有可能的拼音. 然后运行 (完整代码详见 附录 1): 此处提示了 3 处重复, 也就是同一个输入对应多个拼音. 但窝觉得这是合理的: + ng 这个拼音只用于一个汉字 嗯: 但是根据输入习惯, en 可能更合理一些: + hng 这个拼音也只用于一个汉字: + lo 这个拼音也只用于一个汉字: 查看生成的文件: 随机抽查: 窝觉得自然码设计的挺好的, 双拼和全拼基本上是一一对应关系. 在此很佩服前人的智慧. (完整的双拼表请见 附录 3) 4 总结与展望本文根据全拼表和自然码的双拼规则, 生成了双拼表, 并对双拼表进行了检查. 有了双拼表之后, 拼音输入法只需要查表即可得到全拼. 并且只需要更换不同的双拼表, 即可支持不同的双拼方案. 本文使用的代码, 经过修改后应该也能用于别的双拼方案. 附录 1 完整代码运行需要安装 deno: + gen_2p_zirjma.js 附录 2 全拼表 (408 个)数据来源: Unihan_Readings.txt (详见 《从 Unicode 标准提取拼音数据》) 不带声调. 附录 3 双拼表 (自然码)本文使用 CC-BY-SA 4.0 许可发布. |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |