重新精簡Rime小狼毫輸入法字庫
輸入法的詞庫(本文特指單字而非詞組,下稱字庫)不能太小,否則容易打不出想要打的字。但同時輸入法字庫也不應該太大,否則在打字的時候,會有過多生僻的候選字,導致打字效率變低,甚至容易選錯字。Rime小狼毫輸入法的字庫,一般是非常大的,其中包含了很多中日韓統一表意文字擴展區的漢字,我不需要這麼多的生僻字,所以決定對字庫進行精簡。
早在之前,我已經做過這樣的嘗試,但是當時我是對字庫文件進行直接的刪減,刪減到了GB2312的程度。這樣的做法會使得偶爾打生僻字時不方便,缺少可維護性。而且當時為了打出自己偏好的繁體字字形,直接修改了八股文essay.txt,導致一些詞組的輸入出現了問題。所以趁着這個機會,我決定改用另一種更加合理、更加方便維護的方法。而這也要得益於人工智慧大語言模型,在之前,如果不懂Lua編程,那麼將寸步難行。而自從有了人工智慧大語言模型,特別是深度求索這種免費的工具之後,就算不懂編程,也可以讓其代勞,而我們只需要清晰提出自己的需求便可以。網路上亦有網友一針見血地表示,之前Rime輸入法的配置門檻之高一直為人所詬病,很多不懂編程的人面對代碼手足無措,而那些略懂代碼的初學者,雖然能夠完成基本的配置,但是一旦遇到高階配置,也無法得心應手。而人工智慧大語言模型問世之後,Rime輸入法的這些壁壘就被打破了,配置難這個缺點也可以說是因此而消失了。不得不感嘆人工智慧大語言模型真是一項偉大的發明,功在當代,利在千秋。
這次的字庫精簡功能使用Lua來實現,最開始的時候,網友hchunhui有一個librime-lua項目,裡面就有一個生僻字過濾器,用於過濾中日韓統一表意文字擴展區的漢字,不過這個版本的功能較少,滿足不了我的這兩個需求:一是使用快捷鍵控制生僻字過濾器開關,二是無法給一些較常用但又不幸位於擴展區的漢字開綠燈。偶然之間,我又發現了另一網友riverscn的rime-forge項目,這個Lua程式實現了我所需要的快捷鍵開關和例外字功能。說實話在搜尋引擎大海撈針的情況下,能找到剛好如此稀世珍寶實屬不易,同時也非常幸運,可謂是雪中送炭。不過這裡面還加了一個通用規範漢字表,所以有點冗長,我決定在此基礎上進行精簡。在深度求索的幫助下,修改後的版本如下。
-- 基於 https://github.com/riverscn/rime-forge/blob/main/lua/charset.lua |
此版本為溫和版本,而我需要一個激進版本,將字庫縮減到GB2312的級別,當然這個GB2312單單只是GB2312,範圍肯定是要再擴大些,例如還要收錄繁體字以及一些表外的常用字。因此,最適合的做法就是創建一個gb2312.txt這樣的文本檔案,然後往裡面寫入需要保留的漢字,一字一行。當然我剛剛已經說過,範圍要擴大些,所以這個文本檔將是幾個字表的並集。而關於這些官方的字表,rime-aca/character_set這個項目已經有適合計算機閱讀的檔案。我將按照以下的順序進行並集處理,同時進行去重,去重的方式是使用Sublime Text編輯器的Edit→Permute Lines→Unique功能。
- GB2312
- GB12345
- BIG5之常用漢字(兙兛兞兝兡兣嗧瓩糎一乙丁七乃……驪鬱鸛鸞籲)
- 香港小學學習字詞表
- 香港常用字字形表
- 通用规范汉字表之一级二级字表
- 康熙部首(乛罒癶覀龺亅匸夊禸艸襾辵靑)
如此便可以滿足日常打字需求,同時最大程度精簡字庫,避免打字時出現過多重碼。此外,我還需要一個白名單作為補充,命名為user_han.txt。準備好兩個檔案之後,便開始修改Lua程式。同時要考慮到這兩個檔案中為了人類可讀性,會增加一些註釋,所以應該只設置單行單字為有效數據,其他的則視為無效數據,即註釋。
--[[ |
隨後,我們需要在Rime用戶資料夾目錄下創建一個rime.lua,內容為:
local charset = require("charset") |
最後,在輸入方案的客製化檔案中加入相關的開關與引擎。這裡截取新增的部分示例如下:
# 開關名稱由lua中的local b_extended = env.engine.context:get_option("extended_charset")定義 |
這樣子就可以滿足平時只用類似於GB2312的小字庫進行打字,然後有需要打生僻字時,再按快捷鍵臨時切換到大字庫。而事實上Rime自帶的輸入方案的字庫,很多都是包含了擴展區的大字庫,例如我所用的大千注音輸入方案,其上游的地球拼音字庫就包含了擴展區的字,甚至可以稱為超大字庫。而擴展區的字我很少用到,因此這裡還可以再進一步,對字庫原檔案進行硬刪減,刪除擴展區的漢字,僅保留基本區的漢字。這裡可以用這個Python程式:
#!/usr/bin/env python3 |
