Rime 用户词频的丑陋更改方式

编程
Rime
作者

kymot

发布于

2023-03-13 02:21:01 +08:00

修改于

2023-03-13 03:13:00 +08:00

前言

情况是,“原因”、“元音”两个词在我这经常打架。我是搞语言学的嘛,总要输入“元音”这个词……但“原因”作为实际更常用的词理所当然要占据输入的第一位才是。

存在一些方法,比如说用额外的词表实现固定顺序,如这个 issue 所示。但我不想为此更改方案呢。

所以我就想到了更改用户词典中的词频。二进制格式不好改,那就改同步时生成出来的词频,然后在再次同步时因为词频总会取最大值,所以只要写一个很大的值,原来的值就可以安全地被覆盖。

需要强调的是,这是不推荐的做法。

实践

因为我的已经修改了,姑且取一个更早时另一部设备上的同步数据做示范吧。

yuan2 yin1  元音  c=253 d=3.46751e-11 t=317773
yuan2 yin1  原因  c=104 d=0.00588705 t=317773

c 是输入总数量,d 我不知道是什么的缩写,deviation 吗?但无论如何,改变 d 就能改变词的候选顺序,而且是越大越前。

为了最小化更改可能带来的影响,我在同步目录下新建另一个文件夹 dummy/,新建了个 terra_pinyin.userdb.txt,填入以下内容:

# Rime user dictionary
#@/db_name  terra_pinyin
#@/db_type  userdb
#@/rime_version 1.7.3
#@/tick 393271
#@/user_id  dummy
yuan2 yin1  原因  c=500 d=114514 t=393271

然后同步。这时再看同步时产生的 terra_pinyin.userdb.txt,发现“原因”的 d 变成了 10000,看来还是有上限的呢。

总之这下就有保证了。

另外,不建议对单字使用这种方法。我试了一下,会导致简码时也排在最前,影响正常输入。比如,任意拼音以 l 开头的字如果经过这样加工,会排在最常用的字之一——“了”字前面。是两个字以上的、而且是确实常用的词汇的话,那还好些。