登入  |  English
感謝您對「自由軟體鑄造場」的支持與愛護,十多年來「自由軟體鑄造場」受中央研究院支持,並在資訊科學研究所以及資訊科技創新研究中心執行,現已完成階段性的任務。 原網站預計持續維運至 2021年底,網站內容基本上不會再更動。本網站由 Denny Huang 備份封存。
也紀念我們永遠的朋友 李士傑先生(Shih-Chieh Ilya Li)。
源碼專案 在 Windows 上也能用的新酷音輸入法 (Win32-chewing)

在 Windows 上也能用的新酷音輸入法 (Win32-chewing)

新酷音輸入法 (chewing) 是一套原先在 Linux、FreeBSD、Solaris、以及 Mac OS X 等Unix-Like 作業系統上執行的智慧型注音輸入法,受到許多使用者的歡迎與開發者的貢獻,已是一套發展成熟的輸入法。在微軟的 Windows 上,微軟新注音是預設的注音輸入法,但有一群自由軟體開發者用不習慣,想到何不把新酷音移植到 Windows 上?於是新酷音輸入法在 Win32 平台上重獲新生(以下簡稱 Win32 新酷音),雖然開發的過程比想像中艱苦許多,但經過一段時間的耕耘後、目前已經有成果出來,並達到實用的成度,提供了 Windows 上中文輸入另一個新鮮的選擇。

◎ Win32 新酷音開發源起

新酷音輸入法在 Linux 等 Unix-like 系統上獲得肯定,開發也趨於穩定,但後來她之所以在 Win32 平台上開始發展,是緣於開發者對於微軟新注音某些功能的不能忍受。目前開發 libchewing 詞庫計畫的 sky008888 認為,新注音的演算法會把常用自在選字頁中向前移動,以方便使用者能夠快速的找到該字,不過當使用者使用一段時間後,常用字反而會出現選字頁的後面,增加了使用者的選字時間,這樣的功能特色、對某些使用者來說卻會造成困擾。

現在已用 GPL 釋出的知名 BBS 軟體- PCMan 的創始人 PCMan,也是以上不滿使用者的其中之一,於是興起改善 Windows 上注音輸入的念頭。就在同一時間,著名的 OpenVenilla 輸入法已經開始發展 win32 版,PCMan 亦參與重寫 OpenVanilla(OV-win32) 輸入法的圖形介面、相容性改良、以及小幅改善其效率,並在這段開發的過程中,逐漸學習到一些 Win32 IME 輸入法的開發方式。

但因為 OV-win32 整體架構過於龐大,使得啟動速度慢,系統資源耗用過多,實際上 PCMan 只需要使用單一的新酷音輸入法,於是興起開發只包含新酷音輸入法的 Windows 版本的念頭。他參考大陸發展的自由拼音輸入法 freepy、微軟提出的 Text Service Framework(TSF) 與Microsoft Developer Network(MSDN) 等等的文件,加上參考 OV-win32 程式碼,從頭發展,Win32 版的新酷音輸入法的雛形於焉誕生。PCMan 回憶起第一個測試版的 Win32 新酷音源碼,是在 PTT BBS 站上釋出,馬上就有網友下載、並設為預設輸入法,不過也因此碰到開機時輸入法載入錯誤,導致系統無法登入,最後以重灌系統收場,但 PCMan 也感謝這些熱心玩家測試,才能從中找到問題修正錯誤,讓之後的版本能更穩定運作。

由於 Windows XP 上的輸入法需要使用 TSF 開發,才有辦法支援 Windows 語言列,但新酷音目前用的還是前 IME 介面,故 Win32 版的新酷音輸入法會出現兩個 panel,其中新酷音的 panel 還是由 PCMan 親手繪製。目前 PCMan 因為課業關係,不再進行自由軟體開發,因此他已將 Win32 新酷音交棒給其他開發者繼續發展。

◎ Win32 新酷音開發者

目前新酷音輸入法計畫以 Win32 新酷音的開發較為活躍,成員包括 kanru、kcwu(瑕疵修改)、seamxr(修改拼音支援與相容性測試)、sky008888(libchewing 詞庫計畫)等。

Kanru 回憶起加入新酷音計畫,是在大一(2003年)的時候,那時候新酷音的主要開發者之一 Jserv 剛把 libchewing 從 xcin+chewing.patch 的型式分離出來,為了將 libchewing + xcin 移植到 utf8 環境下開始加入開發行列。Kanru patch 完 xcin 的 utf8 支援後,接著建立 chewing 的 autotools 編譯機制,之後就陸陸續續跟 Jserv 一起整理 libchewing。Kanru 表示,由於從一開始使用 Linux 時就很喜歡使用酷音輸入法,所以很樂意參與這個將新酷音專案生命延續下去的計劃。

專門開發 libchewing 詞庫計畫的 sky008888,則是因為 2006 年 5 月 PCMan 在 PTT BBS 的一篇招收人員修改詞庫的文章,注意到新酷音的計畫,同時對微軟的新注音輸入法不滿,才參與 Win32 新酷音的計畫。sky008888 說,目前詞庫計畫的主要目標是修復存在詞庫裡面的瑕疵 (bug),包括 tsi.src 和 phone.cin 裡面的單字無法配合,以及 tsi.src 裡面的同音詞與常用字的組合牴觸者,都需要修訂,因此他目前將著重在這方面工作。Seamxr 加入的方式與 sky008888 類似,也是因為 2006 年 10 月多,在網路上看到 Win32 新酷音,使用後覺得非常不錯,就寫信給 PCMan 想要參加 win32 版新酷音的開發。

◎ 開發時遭遇的困難

Win32 新酷音的開發過程其實十分艱苦,Kanru 認為,移植所花最大工夫,是要理解 Win32 平台本身的輸入法 framework,不但微軟在 MSDN 上提供的文件多到不知道該怎麼看,即使看了也很難懂中間的 message passing 流程。Kanru 表示,MSDN 的文件僅告知寫輸入法要實作哪些 API,但 Windows 上的輸入法屬於message driven,所以光知道有哪些 API 需要實作仍不夠,還要知道哪些 API 被使用後,會發生什麼事,接下來會遇到的狀況,這些都沒有寫在 MSDN 的文件中,他一開始為了比對新酷音跟新注音的不同,還透過可以偷看程式間的 IPC message 的 spy++ 以觀察 message 到底是怎麼跑的。

Seamxr 補充,就他所知開發過程最大的問題,是微軟沒有公佈 IME API 的實做,只有 MSDN 上一堆文件,他們曾經為了一個候選字的問題,讀文件讀了好久還是無法領會,開玩笑說簡直比 Request for Comments (RFC) 還難看懂,只好又在網路上努力找其他的文件閱讀。為了要寫出 Win32-chewing 這個看似只跟使用者有關的應用程式,除了 MSDN 的資料,開發者甚至還得接觸到只有開發低階驅動程式的硬體工程師才需要了解的 Driver Development Kit (DDK),才能順利開發出 Win32-chewing。

◎ Win32 新酷音的迴響與未來發展

Win32 新酷音一推出便受到自由軟體愛好者的歡迎,他們很感謝 PCMan讓它們在 Windows 上有另外一種選擇輸入法的機會。之後經由開發團隊的開發,目前已經發展到 0.3.4.2 版,根據下載的 log 統計,目前大概已有一萬多人次下載過。

Kanru表示,Win32 新酷音相對於注音的優勢就是「智慧選字」,不過相對於新注音的選字演算法,新酷音比較不會有令人驚訝的表現。他補充,新酷音目前的自動學習,是在使用者選字之後、把可能是連在一起的詞記起來,不過每個人的選字習慣不同,有些人是邊打邊選、有些是打完後再選字,因此新酷音對不同使用者可能有不一樣的效果。

因此,如何增強其選字的功能,Kanru 認為將是未來 Win32 新酷音的開發要點。Kanru 未來規劃開發更聰明的學習系統,如自動學習新詞(同一個詞只要在不同的前後文使用兩次以上就會被記住),以及類似關聯詞的系統(如 tab completion,可根據最後打的字猜測可能的詞出來待選)等。

在 libchewing 方面,sky008888 表示,中程目標是消滅龐大的系統詞庫,改以收錄常用詞的系統詞庫,加上多使用者詞庫,如:佛學詞庫、工程師詞庫……等組合,達成讓使用者特製化的需求。另外,sky008888 亦希望能在 Win32 新酷音上,加上類似新注音的螢幕小鍵盤和自訂鍵盤的功能。至於 Vista 版對新酷音的支援,seamxr 表示現在正研究 TSF 中,也許五月就會推出 Vista 版新酷音了。

最後,新酷音計畫的元老 Jserv 表示,新酷音輸入法計畫很希望大學院校的學生,能以智慧型注音輸入法當作專題或者研究素材,畢竟現在這些 codebase 都有了,只是除了功能面的改進外,深入的演算法跟語言層面的改進,才是得以大幅突破的機會。

相關網址:
1. 新酷音輸入法官網
https://chewing.csie.net/
2. 新酷音輸入法詞庫
https://rt.openfoundry.org/Foundry/Project/Download/?Queue=436
3. Debian.Org.Tw 成員 Kanru Chen 專訪
https://www.openfoundry.org/article.pl?sid=05/10/16/1454231




自由軟體鑄造場電子報 : 第 78 期 新酷音輸入法 Windows 版

分類: 源碼專案



評論 

 
0 #1 kevin 2010-11-12 03:47
您好:
新酷音在lenovo T410無法輸入,請問要如何解決?

Tks

kevin