Posts RSS Comments RSS 465 Posts and 1,351 Comments till now

[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。

2 Responses to “[ANN] Lib-Formosa 0.1 (台灣語文程式庫集)”

  1. on 08 Mar 2007 at 22:48Tè Khái-sū

    “Pàng” pháiⁿ thiaⁿ lah (“pàng-s*i”); iōng “hoat” (“hoat-châi”) kám bô khah hó!

  2. on 08 Mar 2007 at 22:57Tè Khái-sū

    Iā-sī kóng “chhut” (“chhut-thâu-thiⁿ”). ☺