Rime输入工具的修改与编译安装
作为一个比较“事儿多”的五笔用户,在使用过几乎所有的主流输入工具后,我最终选择了定制性非常高(同时也比较难以上手)的Rime。刚开始是在Windows下使用小狼毫0.9.30版,这个工具在上屏速度、热键定制还有诸多功能设定方面,都令我非常满意。但是唯一美中不足的是,要使用自动造词功能,就必须开启用户词典,而开启之后,就会出现词序无法固定的问题。举个例子,新世纪五笔中的“去、支、云”三个字为重码项,而rime对于重码项的排序并不是按照常规的词频排序,开始一直以为是程序中存在bug,但后来发现是作者刻意而为,也许是在其他输入法中有用处吧,但是在五笔中真的不合适。经过一两个月断断续续的折腾之后,终于通过修改源代码解决了这个问题,所以决定写个博客记录一下。
1、最终效果
修改之后的程序,能够在开启自动造词之后,依然将单字固定在词组前面。有人说五笔不需要自动造词,这一点本人无法苟同。在前一段时间写毕业论文是,就用到了大量的自定义长词组,比如“支持向量机”。如果不开启自动造词,想要以词组的方式把“支持向量机”打出来, 就必须把这个词组加入词库文件.dict.yaml中(不需要指定词组编码,程序会自动根据单字编码反查并组合,这一点很强大),然后“重新部署”才可以,但对于每个自定义词组都这么做未免太麻烦。如果开启了自动造词,第一次按单字输入之后,以后就可以直接按词组输入,这么简单何乐不为?
2、librime源代码修改
经过长时间的琢磨,终于发现了问题在librime中。librime是Rime输入工具的内核,对于Windows、Linux、MacOS三个平台是通用的,正是它负责记录用户词组和词序调整。仔细观察用户词库文件.userdb.txt,可以发现词序是按候选项中的d值排序的,而d的值会在源代码中librime/src/rime/dict/user_db.cc和user_dictionary.cc两个模块中修改,这两个模块都调用了librime/src/rime/algo/dynamics.h中的formula_d函数,这个函数原本是这么定义的:
inline double formula_d(double d, double t, double da, double ta) {
return d + da * exp((ta - t) / );
}
结合user_dictionary.cc中的调用代码:
v.dee = algo::formula_d(commits, (double)tick_, v.dee, (double)v.tick);
可以看出来,d值会随着时间有一个指数衰减,这就解释了为什么一个候选项的d值本来很大,但长时间不输入,会导致下一次之后d值变的很小。通过修改formula_d,问题迎刃而解:
inline double formula_d(double d, double t, double da, double ta) {
return d + da;
}
修改之后,每次候选项上屏之后,d值都会+1,然后通过给重码设定不同的d值,就可以近似达到固定排序的目的,比如分别为“去、支、云”指定7500、5000、2500,那么“支”要比“去”多上屏2500次才能排在前面,因此说是近似固定排序。这个方法的另一个好处是,只为单字指定词频,而不为词组指定(默认为0),那么就可以保证重码单字排在词组之前,而词组之间会按输入频率排序。
3、Windows下weasel编译
虽然很不喜欢Windows,但是不得不承认Windows做的很傻瓜式,很容易上手。对于程序的编译也是这样,装上VS,事情就搞定一大半了。然后再安装cmake和boost函数库,就可以编译了。但同时,Windows下出了问题也比较难以解决,比如编译脚本build.bat里编译器环境变量命名的错误,就害我找了好久。
4、Ubuntu下编译安装
Ubuntu下编译虽然麻烦一些,要安装很多的工具和函数库,但是出现问题基本上Google一下就能搞定。这里有几点需要记录一下,以方便以后查阅:
1)以源码形式编译和安装,似乎只能在每台机子上现编现装,在其他机子上make好的似乎不能直接make install
2)编译时需要的大部分工具和函数库,都可以通过apt-get install的方式安装,但有两个函数库不在默认的安装源中,分别是GoogleLog(glog)和OpenCC,已上传到百度网盘中备用
3)目前Linux下的输入界面似乎还不能修改,有待研究
Rime输入工具的修改与编译安装的更多相关文章
- 使用autotools系列工具自动部署源代码编译安装
在Linux系统下开发一个较大的项目,完全手动建立Makefile是一件费力而又容易出错的工作.autotools系列工具只需用户输入简单的目标文件.依赖文件.文件目录等就可以比较轻松地生成Makef ...
- 编译安装nginx并修改版本头信息—参考实例
今天做实验的时候,想起我那台yum安装的nginx+php-fpm+mysql服务器上的nginx版本有点低了,并且还要加两个第3方模块,就去nginx官网下载了最新稳定版nginx-1.0.6,好了 ...
- Centos6.6下编译安装Apache2.2.31
安装环境: [root@apache ~]# cat /etc/redhat-release CentOS release 6.6 (Final) [root@apache ~]# uname -r ...
- CentOS 6.4编译安装和部署Zabbix 2.0版本监控(中文)
[一].zabbix简介 zabbix是一个基于web界面的提供分布式系统监视以及网络监视功能的企业级开元解决方案 zabbix由2部分构成,zabbix_server和可选组件zabbix_agen ...
- Nginx使用教程(一):下载并编译安装Nginx
安装依赖 <br\>我们已经选择下载程序源代码进行手动编译,而不是使用软件包管理器(如Yum,Aptitude或Yast)进行安装. 这个选择有两个原因. 首先,软件包可能不包含在您的Li ...
- Zabbix编译安装(全)
一.前言 (一).概述 Zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案,Zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让系 ...
- Linux下通过源码编译安装程序(configure/make/make install的作用,然后在/etc/profile文件里修改PATH环境变量)
一.程序的组成部分 Linux下程序大都是由以下几部分组成: 二进制文件:也就是可以运行的程序文件 库文件:就是通常我们见到的lib目录下的文件 配置文件:这个不必多说,都知道 帮助文档:通常是我们在 ...
- 编译安装Python3.4, pip安装, pypi是pip的源,修改为国内的pypi源
Linux 下编译安装 Python 3.4 更新于 2014-09-24 02:01:05 UEANER 系统环境: CentOS 6.5 x86_64 / Fedora 20 x86_64 安装相 ...
- 使用autotools工具用configure、make、make install编译安装linux工程的详细步骤
使用autotools工具用configure.make.make install编译安装linux工程的详细步骤 转载tmxkwzy 最后发布于2016-11-24 10:20:15 阅读数 324 ...
随机推荐
- (42)C#Stopwatch类(计算程序运行时间)
引入命名空间 using System.Diagnostics; static void Main(string[] args) { Stopwatch sw = new Stopwatch(); s ...
- UVA 10635 Prince and Princess【LCS 问题转换为 LIS】
题目链接: http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=19051 题意: 有两个长度分别为p+1和q+1的由1到n2 ...
- C#制作、打包、签名、发布Activex全过程【转】
http://www.cnblogs.com/still-windows7/p/3148623.html 一.前言 最近有这样一个需求,需要在网页上面启动客户端的软件,软件之间的通信.调用,单单依靠H ...
- jquery_ajax 入门实例
序:本文通过几个小样例,简单介绍怎样使用jqueryAjax异步载入. 1. $(selector).load(url,[data],[callback]) :加载远程HTML文件代码并插入DOM中. ...
- ios 清理缓存(EGO)
一段清理缓存的代码例如以下: dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,) , ^{ NSSt ...
- https双向认证訪问管理后台,採用USBKEY进行系统訪问的身份鉴别,KEY的证书长度大于128位,使用USBKEY登录
近期项目需求,须要实现用USBKEY识别用户登录,採用https双向认证訪问管理后台管理界面,期间碰到过一些小问题,写出来给大家參考下. 1:前期准备工作 USBKEY 硬件:我买的是飞天诚信 epa ...
- Asp.Net初学小结 判断数组中是否有重复的数据
Asp.Net初学小结 第一章 1.搭建Asp.net开发环境 1).net FrameWork(VS) 2)IIS(xp:5.1,2003:6.0,vista:70,win7:7.5) ...
- SD 卡PIN定义
转载:http://blog.sina.com.cn/s/blog_56e19aa70101avnw.html SD卡和TF卡接口引脚定义
- java监听器演示样例
监听器的原理是观察者模式.就像明星(事件源)聚拢了一群粉丝(观察者).当明星有啥举动的时候会通过粉丝们报道出去. 订阅信息.计算器button都是该原理的应用. 以下写了一个监听器的小样例: pack ...
- Quartz 2D编程指南(2)图形上下文(Graphics Contexts)
Graphics Contexts 一个Graphics Context表示一个绘制目标(也能够理解为图形上下文).它包括绘制系统用于完毕绘制指令的绘制參数和设备相关信息.Graphics ...