|
|
第 1 帖 | |
|
|
标题: 标题: 分享我在ubuntu 9.10下编译ibus二笔输入法词库的过程,希望对大家有用 一、起因
在windows环境下,笔者一直使用极点平台下的“的卢”26键二笔输入法,前一段时间安装了ubuntu9.1,使用系统自带的ibus拼音输入法,感觉不习惯,于是上网搜索linux下使用的二笔输入法,发现linux下使用的ibus二笔输入法以及二笔青松输入法是传统的30键二笔输入法,编码方案和“的卢”26键二笔输入法相差较远,也不符合使用习惯,于是萌生了把26键输入法码表移植到ibus输入平台下的想法。 二、尝试 1.从网上下载ibus二笔输入法的安装包: http://ibus.googlecode.com/files/ibu...0090901.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中添加新的二笔输入法了 |
|
|
|
|
|
|
|
第 2 帖 | ||
|
|
引用:
对于原码表中的词条,你保持原有的顺序,对于你新增的词条,你要根据顺序设置词频。 就假如说,你新增的词条,前面是A字,后面是B字。 查 ibus 发现 A 字的词频是 200,B 字的词频是 100 的话,你新增的字设置为 150 即可。这个就是针对同码的情况。 如果是唯一码,那么词频信息可能意义不大。当然如果希望简码输入的时候,词频信息也有用:例如,如果希望输入 abc 的时候,就把 abca, abcb, abcc 都显示出来,那么针对后面三者的词频统计就有价值了。 |
||
|
|
|
||