双拼 (自然码) 的简单实现

您所在的位置:网站首页 简体中文全拼和双拼哪个好 双拼 (自然码) 的简单实现

双拼 (自然码) 的简单实现

2024-07-02 04:34| 来源: 网络整理| 查看: 265

拼音输入法大致可以分为 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