發布開源專案 NChinese

這是臉書帖子的延伸。

不知為啥,Windows 從某個版本開始,底層的 IFELanguage COM API 就不支援 "MSIME.Taiwan" 了(若有人知道原因,請不吝指點一二)。這造成我先前開發的點字軟體無法正常運行,因為台灣的中文點字是以注音來組合的,所以在把一篇中文的文章轉成點字時,必得先反查注音字根,然後才能轉成點字。

然而,我發現 "MSIME.China" 在 Windows 10 依然可用。也就是說,仍可以透過 IFELangage 反查一串中文的拚音字根(這... 🤔 )。於是我嘗試先取得拼音字根,然後把拼音轉成注音符號。這方法雖然可用,卻不太好,因為透過輸入法 API 所取得的拼音,其發音並不完全符合台灣的習慣。

感謝開源,最終我是以新酷音的詞庫檔案為藍本,在自己的專案裡面內建中文注音字典。對於許多常見的破音字,都能依不同語境正確轉換成符合台灣發音習慣的注音字根了。例如 "便宜" 的 "便" 會轉成二聲的 "ㄆ一ㄢˊ",而不會是四聲的 "ㄅㄧㄢˋ"。"宜" 則會是二聲,而不是拚音的輕聲。

我把這些程式碼整理之後,也同樣開源,放在 GitHub 的 NChinese 裡面,採寬鬆的 MIT 授權。目前版本 0.3.3,已經推送至 Nuget.org。歡迎有需要的朋友自行取用、fork、改進,發 pull request 或者在 Github 上面發 issue。(單元測試的覆蓋率,目前還很低,不過核心的 API 至少有了保護,而且大部分的函式其實已經在實際的應用程式中服役兩年以上的時間。)

NChinese 簡介


此開源專案目前包含兩個 nuget 套件:
  • NChinese - 包含內建中文注音詞庫與相關 API,例如反查一串中文字的注音字根。
  • NChinese.Imm - 此套件會用到 Windows 底層的 Imm.dll 與 IFELanguage COM API,所以只適用於 Windows 作業環境。

兩個套件都有提供反查注音字根的函式,只是做法不同。由於 NChinese.Imm 只能運行於 Windows 環境,故建議盡量使用 NChinese。而且,等到有一天我發覺已經不會再用到 NChinese.Imm 裡面的函式,我可能就會將它拿掉,以便讓此開源專案符合 .NET Standard。

範例程式


目前,NChinese 裡面只有一個範例程式,示範如何對一串中文字反查注音和拚音字根。以下是畫面截圖:


底下是透過內建詞庫來反查注音字根的範例:

using NChinese;

// 取得一串中文字的注音字根
var zhuyinProvicer = new ZhuyinReverseConversionProvider();
string[] zhuyinArray = zhuyinProvicer.Convert("便宜又方便得不得了");

foreach (var s in zhuyinArray)
    Console.Write($"{s} ");  

這裡的內建詞庫是以 libchewing 的檔案(tsi.src)為藍本,再經過工具加工之後所產生的。所以透過上述方法所取得的注音字根,在讀音方面比較符合台灣的發音習慣。

查拼音字根的寫法跟上面的範例差不多,就不貼程式碼了。如有興趣,可以到 GitHub 上面下載範例程式

結語


順便一提,先前寫的 Nuke Build 入門文章,其實就是為了在這個專案裡面使用。目前已經能夠用 Nuke 建置腳本來打包 nuget 套件,並自動以 GitHub repo 的版本號碼做為建置時的版號。晚點再找時間寫第二篇 Nuke 入門教學吧!

Happy coding!

沒有留言:

技術提供:Blogger.
回頂端⬆️