Skip to content

認識 La Rime

自序

做這項目是發自對輸入法創新的興趣,爲實驗新的輸入法而打造一款易於定製的智能輸入軟件。 實現好用的方言拼音輸入,也是開發這款軟件主要的目標。

乃定名爲:中州韻輸入法引擎 / Rime Input Method Engine

取意歷史上通行的中州韻,願寫就一部彙集音韻學智慧的輸入法經典之作。

項目網站設在 http://rime.github.io/

感謝 Github. 感謝 Pages.

創造應用價值是一方面,更要堅持對好技術的追求,希望能寫出靈動而易於擴展的代碼,使其成爲一款個性十足的開源輸入法。

歷史

2009年底,佛振按這一思路,借助強大的IBus輸入法框架和Python腳本語言,快速開發出「中州韻」的原型。 2010年,將這一算法引擎由Linux移植到Windows平臺。 幾大方言社區的輸入法愛好者創作了粵語、吳語、中古音輸入方案,竟做到了用曾經夢想的方式打字。

如今有許多朋友關注並樂於幫忙完善這一軟件。俺打盤接受同學們的建議用C++來寫一部正式版。

概念

相對於最初的實驗品,概念沒有多大變化。佛振重新來歸納。

組成這個軟件系統的對象,我給他粗略分成三類: 邏輯對象、數據對象、交互對象。

邏輯對象,各自表達解決輸入法中某類問題的算法,以及描述輸入法的工作流程。

咱假定,從不同種類的輸入法中,可歸納出幾種類型的實現機制,即通用於一類輸入法的算法和數據結構。

輸入法引擎/engine 佛振把他解讀爲用來實現輸入功能的程序,是這些算法及相關數據結構的總和。

輸入法典型的工作流程,大致如此:

  • 獲取並解釋按鍵動作,每個按鍵包含鍵值、按鍵的狀態等信息
  • 生成、分析按鍵序列,形成編碼串;某些按鍵並非直接產生編碼字符,而有時組成輸入串的文字不是按鍵所對應的字符本身
  • 查字典,取得輸入碼對應的同碼字詞列表;合併、排序……
  • 有時,根據策略需要進一步組詞造句
  • 可能會對結果做出場前的修飾處理,如繁簡轉換等
  • 至此,完成了從輸入碼到文字的翻譯,結果是一組將在輸入法介面展現的候選文字
  • 用戶確認,文字上屏,完成了一次輸入

將這一流程中純粹的邏輯部份用程序寫出來,就是我所形容的輸入引擎。

其中不包括:

  • 實現編碼到文字轉換的字典數據,許多方家稱「碼表」
  • 經過操作系統與設備和輸入目的程序交互的組件
  • 展現輸入法信息的介面
  • 配置工具

輸入法中的數據對象,有輸入引擎處理用戶輸入動作所得的動態數據,又有預先配置到輸入法中的輸入方案。

若要講,輸入引擎是跨輸入法的通用程序,輸入方案/schema 即是那差異的部份。 輸入法引擎配置了不同的輸入方案,便是用戶視角下、統一框架內的不同輸入法。 輸入方案按一定的規格撰寫,用戶可於需要時導入到軟件,這便是本項目軟件開發者與輸入方案創作者分工、協作的方式。

輸入方案包含:

  • 配置信息,控制着輸入引擎的行爲
  • 字典(碼表),定義了編碼與候選文字的對應關係

爲了足夠靈活而能支持廣泛的輸入法類型,在輸入方案中,利用 拼寫運算/spelling algebra 機制在輸入碼與字典編碼之間建立一組映射,以此將個別方案中的特殊檢索方式統一到通用的算法。

交互對象,承擔與用戶交換信息的功能。不同於輸入引擎、輸入方案的跨平臺特點,交互對象的實現是系統相關的。 具體地有,輸入法框架通過操作系統與輸入設備、輸入目標程序通信;輸入法介面顯示輸入法的狀態和輸入內容。

項目構成

於是整個工程又可分爲若干子項目:

  • librime-輸入法引擎

  • ibus-rime-Linux發行版

  • weasel/小狼毫-Windows發行版

  • squirrel/鼠鬚管-Mac發行版

  • plum/東風破-配置管理器及輸入方案倉庫

  • essay/八股文-預設詞典及語言模型

開發計劃

偉大雄圖,還是分期來完成吧。

初創期,完成軟件架構和基礎功能。

第一期,要把用戶體驗做到一款正式產品的標準。

  • 易用性:操作方式簡明,有文檔,有配置工具
  • 性能和穩定性:適應主流配置+日常應用場景
  • 輸入效果:優於傳統的碼表輸入法平臺,達到開源輸入法的平均水平

第二期,兼容更多系統平臺。可以嘗試一些創新的設計,形成開發者暨輸入方案創作者社羣。

第三期,添加網絡功能,持續優化輸入效果;建立輸入法創作平臺。

計劃於 八月初八 發表1.0版。即完成初創期,進入第一期的初級階段。

萬事開頭難,雖然實驗版的經驗可做參考,讓這項目高速運轉起來,仍需要大的智慧。

有同學索要文檔,卻真的沒有。千頭萬緒,未及梳理,暫且概說一番,也可意會創作此軟件的思路。

是爲之序。

Released under the MIT License.