[ANN] Lib-Formosa 0.1 (台灣語文程式庫集)
Update 1: 目前尚為 pre-packaged tar/zip ,必須從 svn checkout 出來,晚點來弄。
Update 2: 修正一個 typo, 應該是 khah chá pàng, TL寫成khah tsá pàng, tiânn-tiânn pàng
秉持 open source 要 “khah chá pàng, tiâⁿ-tiâⁿ pàng” (較早放,定定放: release early, release often)的精神,在此發布 Lib-Formosa 這個計劃。
Lib-Formosa 是從 OpenVanilla 的 Holo-POJ 模組 spin-off 出去的計劃,目的是希望提供一組能處理台灣語文的程式庫。
這個計劃是由 pektiong 和我在2006年年初,打算重構 OVIMPOJ 時所開始的構想。我們目前打算為台灣閩南語(Taiwanese Southern Min,又稱 Holo)撰寫可供程式使用的語音文法(phonetic grammar),以供驗證音節正確性,計劃進行得不快就是了。在此我們先行推出「音節組合」所需要的程式碼。我想有了這個程式庫,不管是撰寫台灣語文相關的處理、分析、UI frontend或者是輸入法,應該都會容易許多。
目前 Lib-Formosa 僅有一個稱為 LibHolo 的程式庫,提供取得標過音的台灣閩南語母音,以及提供可從字元串流(character stream)組合完整音節的物件類別。
程式庫目前為 C++ 所撰寫。裡面附有一個簡單的使用範例(將從 stdin 輸入的 ASCII-form POJ 音節轉換為標過音的 Unicode 台羅音節)以及 unit testing (需使用 CxxTest)。文件目前尚相當貧乏。
整個計劃是放在Google Code hosting上面,網址在:http://code.google.com/p/lib-formosa/ 。原始碼為使用New BSD License釋出。
最重要的設計概念和功能如下:
- 支援 POJ 或 TL 做為輸入及輸出格式,內部資料結構為 TL 。
- 有限度的支援 TLPA 及台語通用拼音做為輸入格式。台語通用拼音可能有自然調問題,這個程式庫本身不處理因音節在詞彙位置不同而產生的調性差異,因此是context-agnostic。
- 支援標調的正規化(normalization),亦即在輸出前,將元音標號搬到正確的元音上,依循的規則是Holo的音響律(sonority rules),亦即調號要標在音節中響度最高的母音上。
- HoloSymbol class 本身有內建的游標支援,方便輸入法撰寫(註)。
- 同時支援「組字式」(composed form)及「查詢式」(query form)的輸出,所謂組字型是已經組好的Unicode音節,查詢型是諸於像「thiann5」這種經過正規化的ASCII form,可供資料庫查找(例如查詢 POJ-Holo.cin)使用。
- 使用 C++ string (null-terminating byte string) 做為內部資料結構,因此可以很容易在任何平台上 deploy (encoding-agnostic)。
試以下面的例子說明 HoloSyllable 的使用方式:
#include "LibHolo.h"
using namespace LibHolo;
string example() {
HoloSyllable syl;
syl.setInputType(POJSyllable); // 使用 POJ 輸入
syl.insertCharacterAtCursor('t');
syl.insertCharacterAtCursor('i');
syl.insertCharacterAtCursor('a');
syl.insertCharacterAtCursor('n');
syl.insertCharacterAtCursor('n');
syl.normalize(5); // 第5聲
// 如果使用這行,回傳的 composed form 為 TL: tiânn
// return syl.covertToTLSyllable().composedForm();
// 回傳 POJ composed form: tiâⁿ
return syl.composedForm();
}
目前實作的規模至此,歡迎大家多多利用。
註:經過b6s指出,「游標」在資料結構上,其實就是iterator。
lukhnos :: Mar.08.2007 :: tekhnologia 技術或者藝術 :: 2 Comments »
2 Responses to “[ANN] Lib-Formosa 0.1 (台灣語文程式庫集)”
“Pàng” pháiⁿ thiaⁿ lah (“pàng-s*i”); iōng “hoat” (“hoat-châi”) kám bô khah hó!
Iā-sī kóng “chhut” (“chhut-thâu-thiⁿ”). ☺