RIME行列輸入法補完方案(功能說明及開發心得)

RIME(中州韻) 是一個開源的中文輸入法引擎,支援Windows、Linux、macOS、Android四大平台,並透過一個高自由度的框架提供多種中文輸入法,現時尤其受大陸用家及粵拼輸入法的用家歡迎。

對於自己慣用的行列輸入法,RIME亦有支援,但功能卻殘缺得難以接受。眼見不少行列用家對於在Windows內置的行列輸入法感到不足,對於在其他系統上安裝行列輸入法更是苦惱,自己亦想出一分力改進,所以就嘗試將RIME上的行列輸入法補完,希望透過RIME這個跨平台的輸入法引擎令行列輸入法可以在各平台上暢通無阻。

這次的RIME行列輸入法補完方案的主要目標為還原傳統行列30輸入法上的大部份功能。經我研究後發現不少輸入功能其實都不難在RIME上實現,只是原作者所編的字碼表有所缺失和輸入方案架構設定未夠細緻。略花精力完善後,已能作出以下改進:

  • 支援更多字元,包括簡體字及大量中日韓統一表意文字擴展區A-F所定義之字元
  • 支援一、二級簡碼及特別碼輸入方式
  • 固定單碼及雙碼字候選字順序,其他重碼按用家輸入頻率自動調整順序
  • 預設顯示10個候選字(舊版RIME或只能顯示9個)
  • 3-及0v符號表
  • w+數字符號表連表單名稱標示
  • “?”萬用字元

字碼表重整

以個人認知,行列輸入法最完整的鍵碼表乃出自 老刀 。他的字碼表收錄了幾乎所有電腦可以顯示的漢字所對應的行列鍵碼,涵蓋了簡體字以及大部份中日韓統一表意文字,鍵碼數量是RIME原版所收錄的3倍,近11萬字。同時他的鍵碼表也是在github公開供人取用。所以順理成章就採用了他的鍵碼表來改編。這次補完計劃最重要的工程也是編寫小程式將該cin格式的鍵碼表轉換成RIME所使用的yaml格式。

二級簡碼及特別碼的處理

有一些輸入功能未必能夠在RIME的框架下實現,例如RIME按空白鍵會自動上第一候選字,就令行列輸入法的特別碼輸入無法實現。本來特別碼的設計是用家輸入特定鍵碼後再按空白鍵就能輸入特定常用字,而該字本身不會出現於選字列表中。現在為了保持特別碼的打法,特別碼的字就必須被編成候選字的第一候選。

如此一來特別碼又會與部份二級簡碼重疊。二級簡碼本來是將字元編到特定與其原鍵碼有關聯的數字鍵上,以便用家記憶,具一定的重要性。一般同碼的二級簡碼並不佔用所有數字位置,在特別碼必須放到候選列表的情況下一個折衷方案就是將被佔位的簡碼字順延到後面未佔用的位置上。不過這個做法需要逐個特別碼和二級簡碼以人手處理,比較費時失事,而且只改動部份簡碼而非統一取碼原則亦有點吊兒郎當,所以到最後我採用一個更簡單的處理方法:取消二級簡碼的數字位置定義,讓二級簡碼從2開始順序列出。這樣做可避免尷尬,又可以讓後續碼建議字提早在候選字列表首頁列出。只是對於習慣二級簡碼數字位置的用家而言或需時適應新位置。

w+數字符號表的處理

符號表是行列輸入法上一個頗受歡迎的輸入功能,用家只需按下w+數字就可以輸入各式各樣平常很難打出的符號,例如中式括號、希臘字母、注音符號等。很少有中文輸入法會提供一個如此簡單的方式輸入符號。

可是,因RIME選字鍵(0–9)和拼字碼不能重疊,正常w+數字會變成選字而無法顯示符號表,故需以其他按鍵代替。幸好RIME可以將大階字母視作鍵碼的一種,所以我就將w+數字改為大楷Q-P行,一鍵即可進入符號表,相信會更加方便。

利用這個特性,日後還可以定義更多常用的符號到其他大階字母中,例如Emoji。

其他由RIME提供的實用輸入功能

選擇在RIME上開發行列輸入法的一部份原因,是因為RIME有很多頗為實用的功能,也很容易擴展。包括以下這些:

詞句連書

RIME可以在連續輸入多個字的鍵碼後才上字,引擎會根據用家的輸人組合及其詞庫判斷用家想打的詞句。如果判斷準確是可以省下不少按鍵次數。行列輸入法本身重碼率不高,引擎需判斷的組合較少,所以準確度也不錯,大家可以在輸入常見詞句時考慮使用以增加效率。

RIME行列亦將英文單引號「’」定作斷字碼,可在每個字的字碼之間輸入以作分隔,讓引擎更準確判斷詞句。

--

--

Terry Tsang @ 青鳥脈博

正在德國深造的90後香港電腦工程師。偶爾寫寫電腦技術、時政、分享攝影作品等。| 本站: https://bluebirdbeats.com/ | fb: fb.me/archerindigo | ig: terrytsang.indigo