ibus原生码表


ibus-table

ibus-tableibus 框架的原生码表,不要看到「原生」二字,就以为必然就更高效——其实恰恰相反。

ibus-tablefcitx5-table 作为两个流行框架的原生码表,都是用前端去检索二进制词典,运行的效率与性能与有着独立引擎的 RIME 相差很远。

原生码表的性能与功能,都远远不及中州韵。但是,作为一项基础设施,还是有必要讲一下它的用法。

使用方法

资源库里的「ibus原生码表」,解压后有 run.sh 文件,Debian 系列发行版可直接运行:

#!/bin/bash 

python3 ./reset_dic.py

sudo apt install ibus-table ibus-table-wubi -y

cd ./achieve

ibus-table-createdb -n wb98.db -s wb98.txt

sudo rm -rf /usr/share/ibus-table/tables/*.db

sudo cp -rf ./wb98.db /usr/share/ibus-table/tables

sudo chmod -R 755 /usr/share/ibus-table/tables

echo "重启系统后,在 ibus 的面板下添加「五笔98版」。"
 

可以看到,里面有 apt install 命令,其它发行版自行修改为合适的包管理命令即可。

文件结构

从上面可以看到,run.sh 执行了一个 python 脚本:

# 导入模块
import os
import re


# 获取文件名
file_list = os.listdir(".")
my_path = os.path.abspath('.')
my_list = list(filter(lambda x: re.match('.*txt', x) != None, file_list)) 

# 抛异常
if len(my_list) != 1:
    print("请在『ibus-table-tool』这个文件夹下面\n只放\n一个『单行单义』的码表文件。")
    input()
    exit()

# 文件名赋值
txt_name = my_list[0]

# 先写表头

# 合成『ibus-table』
# 初始化『new_table』为『wb98.txt』
new_table = open('%s/achieve/wb98.txt'%(my_path),"w",encoding='utf-8')
new_table.close()
# 写入表头
new_table = open('%s/achieve/wb98.txt'%(my_path),"a", encoding='utf-8')
rd_conf = open('%s/base/表头.txt'%(my_path),"r",encoding='utf-8')
while True:
  conf_line = rd_conf.readline()
  new_table.write(conf_line)
  if conf_line == "":
    break
rd_conf.close()
new_table.close()
print("表头写入完毕,\n即将写入码表正文,\n这可能会需要一点时间,\n稍安匆躁。")
# 再写正文
# 写正文
new_table = open('%s/achieve/wb98.txt'%(my_path),"a",encoding='utf-8')
rd_dup = open(txt_name,"r", encoding='utf-8')
freq_num = 900000
while True:
  dup_line = rd_dup.readline().rstrip()
  if dup_line == "":
      break
  cut_line = dup_line.split('\t',1)
  dup = cut_line[1] + '\t' + cut_line[0] + '\t' + str(freq_num) + '\n'
  new_table.write(dup)
  freq_num -= 1
rd_dup.close()
new_table.close()
print("正文已经写好了,\n即将写入构词表。")
# 最后构词表
# 写入造词表
new_table = open('%s/achieve/wb98.txt'%(my_path),"a",encoding='utf-8')
rd_gouci = open('%s/base/造词表.txt'%(my_path),"r",encoding='utf-8')
while True:
  gouci_line = rd_gouci.readline()
  new_table.write(gouci_line)
  if gouci_line == "":
      break
rd_gouci.close()
new_table.close()
print("全部写好,转换成功!")

脚本从「单行单义」码表,构建出一个 ibus-table 格式的新表。

后续,则调用 ibus-table-createdb -n wb98.db -s wb98.txt 转化为二进制码表,并放到正确的位置里。

补记

ibus-table 依然保持着二十年前的样子,不支持「四码唯一自动上屏」功能。当然,也没有更多进阶的设置。

非常不建议使用 ibus-table 作为日用,ibus-rime 有着更快更好的实现。


文章作者: 五笔小筑
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 五笔小筑 !
评论
  目录