关于 Gboard 双拼支持、输入中出现词语和拼音被莫名分割、txt格式词库 等问题的说明
双拼 是很多人关心的一个问题,由于我之前并不了解双拼,也以为这需要专门的词库进行支持,但通过一些尝试后发现并不是这样,无论是 全拼 还是 双拼,使用的其实都是 全拼 的输入法词库,双拼只是全拼输入的一种键盘映射。
但为什么这个词库并不能在双拼中使用呢?这个问题也可以和 全拼输入 中词语和拼音被莫名切断 这样的问题一并解答。这些问题的根源在于词库的格式。
当前提供的数据其实并不能算作 Gboard 的词库,只能算作 自定义短语 ,Gboard 以及更早之前的 谷歌拼音输入法 默认的词库是 *_dict_3_3 ,在这种格式下,基本上所有的问题都可以解决,但为什么我不直接提供这种格式?又或者,为什么不提供 txt 格式词库,这样未 root 用户也能使用。
最根本的原因是词库容量有上限,在 Gboard 和 谷歌拼音输入法 的应用源代码中,词库数据容量上限为 500000 。
注意,这并不是说它可以支持50万条词汇,应用会对每一个词汇进行切割归类处理,当一个较长的词汇出现时,对应在词库中占用的条数远不止一个,这样就实现了无论用户输入的是 完整的全拼 还是 拼音首字母 还是 部分全拼部分首字母,只要相关的数据能够对应,这个词语就能够被检索出来。
而在 自定义短语 也就是我现在这个词库的模式中,比如 拼音输入法 这个五个字的词语,它在其中对应的就只有 pin yin shu ru fa 这一个数据,在输入过程中应用也在进行一些事实上是错误的后续检索,但只有当你输入完整的拼音,正确的词语才会被检索出来,这就造成了输入过程中词语和拼音被莫名其妙分割的现象。(这个例子中的词语过于简单,只是方便理解,实际上并不能代表实际情况)
其实应用也会对 自定义短语 进行一个词库生成,但由于数据容量上限,它很快就会被清空。 txt 格式词库也是如此,并且导入这种格式需要耗费非常久的时间。
双拼只是全拼输入的一种键盘映射,正是如此,当前这个词库由于实现方式的限制,并不能支持双拼输入。
另一个问题时出现在输入过程中,应用会把用户的输入也存入其中,随着输入量的增加,加上数据总容量的限制,这会造成词库中原有的词汇丢失,当词库总数达到一定数目,整个词库都会被清空。所以实际到用户最终使用时,输入法词库具体能容纳多少词汇,取决于每个用户自己的日常输入。
这个词库逻辑是从 谷歌拼音输入法 时代就开始的,对应的解决方法只能是修改相关的应用代码,但考虑到输入法对于系统安全及个人隐私的重要性,我并不觉得这是一个普遍可行的方案,事实上 Magisk 这种模块更新的方式对于绝大多数人来说都过于危险了。
很多年来我在 Android 平台上都是 谷歌拼音 和 Gboard 的拥趸,我最开始制作这个词库的目的是为了补充 Gboard 内置的孱弱中文词库,我也知道这个词库实现的方式不是最优的方式,它也只能是一个补充,虽然存在很多的不完美。