ImeLib v0.1 發布於 CodePlex

剛剛把這兩天寫的一個取注音字根的元件放到 CodePlex 上面,取名為 ImeLib,以 LGPL 授權方式發布,附完整 C# 原始碼和一個範例程式。目前的版本是 0.1,還缺很多東西,但基本上我自己需要的部份(取得中文注音字根)已經大致完成且測試 OK。以下是範例程式的畫面:


注意兩個「便」和「得」的注音字根是不同的。這對我開發的應用程式來說非常重要,因為它必須將整篇文章的注音抓出來。不過,我後來發現在某些環境上並無法取得正確讀音的字根,這情況似乎跟微軟新注音 2007 把字根反查功能拿掉有關--不確定,還得多找幾台不同環境的機器測試看看。

取日文平假名或片假名:


大陸拼音(Pin-Yin):


在執行 ImeLib 的範例程式時,你的機器上至少要有微軟新注音;如果要測試大陸拼音的功能,可能還得安裝簡體中文版的 Microsoft Pinyin IME 3.0,否則在取得拼音時會發生 expcetion。怪的是,我的機器上並沒有安裝日文輸入法也照樣能取得對應的片假名或平假名,也許日文輸入法的相關服務是 Windows 預設便提供的?此外,IFELanguage 介面中的 GetJMorphResult 方法儘管可以取得中、日、韓等東亞語言的注音字根,但名稱裡的 "J" 似乎是 "Japanese" 的縮寫,也許最初定義此介面的是日本人吧(我胡亂猜的)。

基本上,ImeLib 主要是封裝 IFELanguage 介面所定義的功能,並提供一些方便的 methods。有關 IFELanguage 方面的技術資源非常少,網路上能找到值得參考的,大概就是這篇文章吧: http://www.mihai-nita.net/article.php?artID=20051215a,該文的範例程式是以 C++ 撰寫,我曾嘗試尋找 C# 版的 IFELanguage 實作,結果只找到這篇:C#中使用 IFELanguage 進行分詞和注音處理,而且實際試過之後,發現程式碼是有問題的(拆解 Morrslt 結構的巢狀迴圈有 bug),而且那些指標運算的寫法也太傷腦筋了、不好維護,只好自己動手寫一個。

原本我已經有寫類似的元件,叫做 ImmHelper,而它是透過 P/Invoke 呼叫 Imm32.dll 的 API(例如:ImmGetConversionList),並分別利用傳統注音和新注音來取得單一中文字和整句中文的注音字根。由於最近發現這種方式在某些 Windows 作業環境上會無法取得整句中文的注音字根(單一中文字還可以),故試試 IFELanguage。其實我也不知道這兩種方法哪一種比較好,只是嘗試看看不同的方法而已。(2009-4-4 更新:後來寫的測試報告有提到 IMM32.dll 的缺點,詳見文後列的相關資源

ImeLib 專案首頁:http://imelib.codeplex.com/

相關資源
Copyright © 2012. Huan-Lin 學習筆記 - All Rights Reserved
Powered by Blogger
Template Design by Cool Blogger Tutorials
Published by Templates Doctor