最近有做个小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次,这个次数决定了它们候选位的序号,同时百度输入法还提供了智能清理自造词的功能,用的应该也是这个数据,所以你想要导出的词排得越前面,越不容易被清理,那就适当把这个数提高一点吧.

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

  1. 使用ASCII码和拼音的映射
    优点:零依赖,只有一个Class,使用简单
    缺点:只支持常见的一级汉字,对于一些不常见的汉字(亳bo)则无法正确获取拼音
    (中文编码中一级汉字是按拼音排序的,容易映射。而二级汉字是按笔画部首排序的)
  2. 使用第三方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” 出现我们预设好的 “我就是这么一长串的内容”

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

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

  1. android 常用短语的添加,操作方法:使用Android上的百度输入法提供的导入词库和个性化短语,批量创建单词便于输入...

    最近,我制作了一个小型APP,可以管理许多产品.产品名称不是一个常用词.用户经常需要输入这些产品名称(在软件外部,无法自动完成),并且每次都必须选择单词,正确的候选者通常不会出现在前面,很容易出错,并 ...

  2. 在NVIDIA A100 GPU上利用硬件JPEG解码器和NVIDIA nvJPEG库

    在NVIDIA A100 GPU上利用硬件JPEG解码器和NVIDIA nvJPEG库 根据调查,普通人产生的1.2万亿张图像可以通过电话或数码相机捕获.这样的图像的存储,尤其是以高分辨率的原始格式, ...

  3. 关于利用Klayout查看GDS需要导入工艺库的layer properties file(.lyp)

    经过一番搜索(踩坑),终于摸索到了针对不同工艺库klayout查看版图的方法.klayout可以轻量级快速查看芯片版图,当然还有其他很多功能还在探索中. 软件可以从下面网址下载,各个版本都有,真是不错 ...

  4. 百度输入法皮肤工具提示 CSS,如何利用百度输入法超级皮肤增加特别键盘

    百度输入法可以超级皮肤功能可以调整键盘布局.其实也可以利用此功能制作特别的键盘.比如笔者制作的希腊字母键盘,临时输入公式用:注音符号键盘和拼音键盘,临时输入注音符号和带调拼音. 希腊字母键盘 注音键盘 ...

  5. 车联网 python_利用百度车联网提供的天气查询接口用python查询天气信息

    (1)程序查询结果图(图中较下的图是百度查询天气的结果) (2)http://developer.baidu.com/map/carapi-7.htm 百度车联网接口说明中有天气查询的接口,目前是免费 ...

  6. [通讯录工具][安卓+苹果]如何将Excel电话通讯录导入华为或苹果手机?如何批量导入号码到安卓手机,下面是具体操作

    今天写一篇帖子讲如何把大批量的号码导入华为手机 也就是安卓手机, 苹果手机也同样适用,在 日常工作和生活中常常有大批量的电话存在Excel表格里, 如何快速的将号码导入到华为手机或者安卓手机, 有的人 ...

  7. 在Ubuntu 16.04.5 LTS上利用python 2.7版本的pillow库拼接近千张图片实录

    缘由 这两年网上出现了使用python中的PIL或是pillow库拼接图片和朋友圈图像的例子,让我非常感兴趣,比较典型的是这几个例子: <朋友圈的朋友们,你们终于可以互相看到了> < ...

  8. 百度输入法键盘android,百度输入法Android 1.2.0正式版 支持智能手写

    百度手机输入法前身为点讯梅花手机输入法.这是目前智能手机用户最熟悉及喜爱的输入法之一,独有触摸屏点划结合专利技术等交互设计专利,加上基于每日数亿计搜索请求挑选的百度精准词库,极大提高输入法综合输入效率 ...

  9. SolidWorks频繁闪退,可能是(百度)输入法引起的

    我电脑的操作系统是Win 10 1803(17134.167),硬件:i7-6700HQ,16GB DDR4内存,Intel HD 530+GTX 970M. 在自己电脑上装过SolidWorks 2 ...

最新文章

  1. 刀剑英雄登陆显示服务器繁忙,玩刀剑遇到问题解决方法
  2. 战略设计,必须首先把握产业的脉搏
  3. python中一共有多少个关键字-Python中有几个关键字
  4. POJ - 2230 Watchcow(欧拉图)
  5. BZOJ4912 SDOI2017天才黑客(最短路+虚树)
  6. 前端也要会的数据结构 (不定期更新篇)
  7. 采用Cloudera-Manager安装CDH时,采用内嵌数据库各数据库用户密码的保存位置
  8. 计算机一级要注意什么保存,计算机一级考试重点及注意事项
  9. autojs各种插件以及教程模板
  10. 网易企业邮箱如何设置反垃圾规则?【网易企业邮箱】
  11. c#简单实现打字母小游戏的编程思想
  12. 惠州教学实验室建设与管理
  13. ZYNQ Linux 移植:包含petalinux移植和手动移植debian9
  14. [USACO2.1]健康的荷斯坦奶牛 Healthy Holsteins
  15. 入门】求一个两位数的个位和十位的和
  16. 小程序开发API之生物认证(指纹)
  17. 新冠疫情下的化工企业数字化转型
  18. 蓝牙控制esp32单片机(三)
  19. vmware16安装macOS
  20. Find_in_set()函数的使用及in()用法详解

热门文章

  1. 【蓝桥杯每日一练:小Z的序列游戏-version1】
  2. unity制作滚动的天空简易版(在b站学的,此处总结,供学习)
  3. 如何在图片上编辑文字?三招教你怎么编辑图片上的文字
  4. Spring Boot CORS跨域资源共享实现方案
  5. ThingsBoard RPC control
  6. java中关键字缺省(default)
  7. 华为手机助手 无法访问服务器,EMUI4.X手机及windowsXP系统无法正常使用华为手机助手问题...
  8. geo读取表达矩阵 RNA-seq R语言部分(表达矩阵合并及id转换)
  9. oracle和mysql查询条件排序_Oracle数据库中ORDERBY排序和查询按IN条件的顺序输出
  10. endnote中CWYW无文件_文献管理工具(三):EndNote 操作指南(免费在线版)