|
一、起因
在windows环境下,笔者一直使用极点平台下的“的卢”26键二笔输入法,前一段时间安装了ubuntu9.1,使用系统自带的ibus拼音输入法,感觉不习惯,于是上网搜索linux下使用的二笔输入法,发现linux下使用的ibus二笔输入法以及二笔青松输入法是传统的30键二笔输入法,编码方案和“的卢”26键二笔输入法相差较远,也不符合使用习惯,于是萌生了把26键输入法码表移植到ibus输入平台下的想法。
二、尝试
1.从网上下载ibus二笔输入法的安装包:
http://ibus.googlecode.com/files ... 2.0.20090901.tar.gz
2.解压下载回来的压缩包:
tar -zxf ibus-table-erbi-1.2.0.20090901.tar.gz
3.解压后在当前目录生成一个名为ibus-table-erbi-1.2.0.20090901的目录,打开 ibus-table-erbi-1.2.0.20090901/tables 目录下的 erbi.txt,修改如下内容:
第一个需要修改的地方:
### Valid input chars.
VALID_INPUT_CHARS = abcdefghijklmnopqrstuvwxyz,./;
上面的两行是三十键二笔输入法的编码方案的所有字符,二十六个英文字母加上四个标点符号,我用的二十六键二笔输入法编码方案输入字符只有二十六个字母按键,所以要修改为如下内容(去掉四个标点符号):
### Valid input chars.
VALID_INPUT_CHARS = abcdefghijklmnopqrstuvwxyz
第二个需要修改的地方:
### Define the prompts of each valid input char.
BEGIN_CHAR_PROMPTS_DEFINITION
a 安
b 不
c 产
d 的
e 而
f 分
g 个
h 和
i 有
j 就
k 可
l 了
m 们
n 你
o 哦
p 平
q 起
r 人
s 是
t 他
u 大
v 这
w 为
x 学
y 一
z 在
, ,
. 。
/ 、
; ;
END_CHAR_PROMPTS_DEFINITION
上面的内容是一级简码,也就是只要一个字母就能打出来的字,因为采用二十六键二笔输入法的编码方案,所以最下面的四行要去掉
第三个需要修改的地方,也是最重要的地方,码表:
### Begin Table data.
BEGIN_TABLE
/ 、 0
/, Ⅲ 0
/. Ⅳ 0
// Ⅴ 0
/; 拾 3454
/a 壹 94
/b ⑸ 0
/c ⑶ 0
/d 叁 578
/e ③ 0
/f 肆 1399
...
...
...
...
...
...
...
uzuo 琢 995
uzuo 嘬 69
uzuo 笮 0
uzuo 酢 19
uzuo 柞 51
END_TABLE
以上是ibus二笔输入法的码表节选,我使用的是的卢二笔的二十六键码表,内容如下:
[Text]
a 安
aadb 嗷嗷待哺
aajj 安安静静
aaww 安安稳稳
abbd 按兵不动
abdc 安步当车
abjb 按部就班
abss 爱不释手
abzb 阿布扎比
ac 嫒
...
...
...
...
...
...
...
zzzq 铸造 镇长
zzzs 自作自受
zzzt 战争状态
zzzu 针扎
zzzw 针织物
zzzx 沾沾自喜 只争朝夕
zzzy 种族主义
zzzz 自作主张 重中之重
最初的想法比较简单,只是把我的码表部分(去掉"[Text]")复制到 ibus 码表部分覆盖掉原来的码表,于是码表变成了下面的样子:
BEGIN_TABLE
a 安
aadb 嗷嗷待哺
aajj 安安静静
aaww 安安稳稳
abbd 按兵不动
abdc 安步当车
abjb 按部就班
abss 爱不释手
abzb 阿布扎比
ac 嫒
...
...
...
...
...
...
...
zzzq 铸造 镇长
zzzs 自作自受
zzzt 战争状态
zzzu 针扎
zzzw 针织物
zzzx 沾沾自喜 只争朝夕
zzzy 种族主义
zzzz 自作主张 重中之重
END_TABLE
当然这只是尝试,经过编译测试失败!
后来上网搜索得知,ibus的码表中第三列的数字是“词频”,并且ibus码表有严格的要求,参见这个帖子:
http://code.google.com/p/ibus/issues/detail?id=94
该帖子中相关内容如下:
----------------------------------
* 每列之间必须使用tab(\t)分割,而不能空格
* 每个词条必须要有一个词频,或者说必须有两个tab分开的三部分。
----------------------------------
参考ibus-table-erbi-1.2.0.20090901/tables/template.txt,另外我又总结了两条:
* 重码部分用两行或多行表示,而不是的卢码表的一行多个编码
* 文件保存格式必须采用UTF-8方案
我搜索了很多网站,没找到关于词频的详细定义和相关算法,实在没有办法生成这个词频字段,有的网友是采用全部置0或1的方法解决的,我经过综合考虑,另外采用了一个方案:
* 对于的卢码表中在ibus码表中存在的词条,采用ibus码表的词频
* 对于的量码表中在ibus码表中不存在的词条,其词频置0
剩下的就是怎样实现上面的方案了,我采用了比较熟悉的C语言来解决问题,实现思路是这样的:
从的卢码表中读取一行(编码及词条),然后从ibus码表中检索是否存在该词条,如果有该词条则将的卢码表中的编码及词条加上ibus码表中的相应词条后面的词频写到一个新文件中去;如果在ibus码表中没有该词条则将的卢码表中的编码及词条加上“0”写到上述的新文件中,最后生成的文件就是符合ibus要求的二十六键二笔输入法的码表了。
最后编译码表:
/usr/bin/ibus-table-createdb -n erbi.db -s erbi.txt
将生成的码表文件和相关的图标文件复制到相关目录:
cp ibus-table-erbi-1.2.0.20090901/tables/erbi.db /usr/share/ibus-table/tables/
cp ibus-table-erbi-1.2.0.20090901/icons/erbi.png /usr/share/ibus-table/icons/
注销并重新登录,就可以在ibus中添加新的二笔输入法了 |
|