安卓上利用百度输入法提供的导入词库与个性短语,批量造词方便输入 您所在的位置:网站首页 百度输入法的数学符号 安卓上利用百度输入法提供的导入词库与个性短语,批量造词方便输入

安卓上利用百度输入法提供的导入词库与个性短语,批量造词方便输入

2023-08-25 14:29| 来源: 网络整理| 查看: 265

最近有做个小APP,里面管理了很多的商品,商品名称不是常见的词,用户在会需要经常输入这些商品名称(软件外部,无法做自动补全),每次都要选词,正确的候选项往往不会出现在很前面,容易误选,输入效率较低.按说,这个事情跟App本身无关,是输入法应该考虑的问题,不过我想光靠输入法肯定是无法解决这个问题的,用户使用体验至上,我就尝试了解决这个痛点.

这个问题的关键在于,要输入的词语词库里面没有,所以需要选,虽然各大输入法均会记录用户输入过的自造词,但这个词库的形成过于缓慢,无法快速适应新词,如果能学习词库规则,软件批量造词库再导入输入法,这样输入的准确性就会一下子上去了.

由于我常用的输入法是百度输入法,对其比较熟悉,更是很喜爱它的 自定义短语 功能,故采用了百度输入法作为例子,实现了这个功能.

百度输入法(这里指安卓版本的百度输入法,如下同)提供导入词库的设置在 词库管理 →词库备份与恢复 里面,我们要先备份一下本地的词库,然后拿到它的备份文件去分析,才能制作这样的文件.

点击备份会在SD卡 baidu/ime/ 路径下生成两个文件:en2.txt和ch3.txt.其中en2.txt放的是英文自造词,ch3.txt放的是中文自造词 en2.txt示例如下:

...... ArcGIS 55000 arcgis 55000 are 55000 Are 55000 atr 55000 ate 55000 atm 60000 ATM 60003 ......

ch3.txt示

...... 藏(cang) 60001 仓促(cang|cu) 60000 仓库(cang|ku) 60002 藏了(cang|le) 60000 苍穹(cang|qiong) 60000 沧桑(cang|sang) 60000 层(ceng) 60005 蹭(ceng) 60027 层次(ceng|ci) 60005 ......

英文规则简单,就不过多解释,中文的话,就是中文名字.然后是括号,里面放它的拼音,每个汉字拼音的中间用|分隔,那最后的数字是什么意思呢?其实那是输入过的次数,自造词有个基准数60000,比如说 层(ceng) 60005 我就输入ceng然后选择”层”6次(为啥不是5次?嘿嘿程序猿都懂),选择”蹭”就是28次,这个次数决定了它们候选位的序号,同时百度输入法还提供了智能清理自造词的功能,用的应该也是这个数据,所以你想要导出的词排得越前面,越不容易被清理,那就适当把这个数提高一点吧.

然后了解清楚了这个规则之后,我们就可以制作这个词库了.如自造中文的话首先需要解决的就是拼音的问题,查了一下,网上普遍使用两种方案,这里提供了比较详细的介绍,我这里就简单摘录一下:

使用ASCII码和拼音的映射 优点:零依赖,只有一个Class,使用简单 缺点:只支持常见的一级汉字,对于一些不常见的汉字(亳bo)则无法正确获取拼音 (中文编码中一级汉字是按拼音排序的,容易映射。而二级汉字是按笔画部首排序的)使用第三方pinyin4j的jar包。 优点:使用简单,实用性好 缺点:需要依赖第三方jar包

我先试了第一种,方便简洁,实在是太简洁了,但是确实不够准确,比如 蔻 字就没搞对,作为有点完美主义的我,就选择了第二种方案,准确性确实大大提高了,除了多音字因素,目前还没有发现搞错的.

在解决了拼音的问题后,再根据具体内容和格式就可以开始制作词库,使用安卓OutputStreamWriter进行文件生成,不过如果直接生成的话,导入会不成功,经过比较了格式,发现已经和它导出的格式完全一致了,为何不认呢?由于此前饱受字符编码的折磨,我第一反应就是字符编码不对,通过电脑比对了导出的和我生成的,发现导出的采用的是Unicode的编码,而我生成的是utt-8,所以我们只需在导出的时候指定生成Unicode编码即可

OutputStreamWriter os = new OutputStreamWriter(new FileOutputStream(f), "Unicode");

然后再导出,导入成功!

不过我感觉还是不是太完美,假如说有个产品的名字叫 “我就是这么一长串的内容” ,那么按照我们的这种方式,造出来的词太长了,百度输入法也限制了自造词的长度是8个字,碰到中英文混输的方式这个也有点无能为力,这里就要用上第二个法宝:个性短语了.

这里我简单介绍一些个性短语的作用.个性短语,就是通过自定义输入码和对应的输入内容,比如我定义了输入码是 “dz” 然后输入法在中文状态下输入 dz,就会出现我定义的输入内容 “我的地址”,而这个输入内容是可以很长很长的,也可以中英文组合,简直是快速输入的神器.百度输入法的个性短语功能在 高级设置 → 个性短语→ 管理个性短语 可以进行导入和导出,我们也可以先导出看看它的格式

[快速符号] alpha=0,α beta=0,β chi=9,χ delta=0,Δ epsilon=0,ε gamma=9,γ lambda=0,λ mu=9,μ number=0,№ omicron=0,ο omega=0,Ω ......

官方的默认有个快速符号的分组,然后里面都是一些数学符号,其格式是 输入码=候选位,输入内容 然后每个分组以[分组名]开始,值得一提的是 个性短语的导入是覆盖的,不像词库的导入是合并的.其次是个性短语的优先级是最高的(除了固定首词的除外),所以用其来定义一些常输入的长文本,例如邮箱,地址,电话号码等内容再合适不过了.

在大量的产品名称下,如何定义个性短语的输入码合适呢?我采取的方式是默认取拼音首字母,同时支持用户自行修改.

其实实现难度并不大,不过起到的效果个人认为是非常好的.词库提供了更多的自动联想功能,而个性短语则是准确输入,双管齐下,输入畅快无比.

最后来两张效果图 同样是 输入 “我就是这么一长串的内容”

1.输入”ycc” 出现我们预设好的 “我就是这么一长串的内容” 输入ycc

2.输入了”我就是这么”,后面自动联想了”一长串的内容” 自动联想



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有