在這套函式庫中,詞是最重要的處理階段。對中文語言來說, 詞跟英文中的單字一樣,都是具有意義的最小單位。但是跟英文不同的是, 中文的詞與詞間沒有明顯的分隔,或是說像英文中的空白一樣, 可以區隔兩個單字的分隔符號。
因此,我們需要斷詞。斷詞能將一串中文字中的詞分隔出來。
中文的斷詞目前都是採用比對詞庫的方式來作, 所以一個足夠大且效率好的詞庫是需要的。 所以,libtabe 中用 Berkeley DB 來管理詞庫,如此一來,既使詞庫很大時, 也還能維持很好的效能。
int tabeBig5TsiLookupPossibleTsiYin(struct TsiInfo *tsi);
查出 TsiInfo 中的 tsi 這個字串所有的詞音。
詞音的總數存在 TsiInfo 的 yinnum 中,yindata 則是這些詞音,連續存放。
struct TsiDB *tabeTsiDBOpen(int type, const char *db_name, int flags);
開啟一個詞庫。type 是詞庫的種類,目前只有 DB_TYPE_DB 一種, 也就是用 Berkeley DB。flags 是這個資料庫的一些特性,如下:
傳回的 TsiDB 就是當呼叫其他詞庫處理函數時第一個參數。
void tsidb->Close(struct TsiDB *tsidb);
關閉詞庫。
int tsidb->RecordNumber(struct TsiDB *tsidb);
查詢該詞庫中共有多少筆詞。
int tsidb->Put(struct TsiDB *tsidb, struct TsiInfo *tsi);
將 TsiInfo 中的 tsi、refcount、yinnum、yindata 存入詞庫中。
int tsidb->Get(struct TsiDB *tsidb, struct TsiInfo *tsi);
查詢詞庫中是否有 TsiInfo 中的 tsi 這個詞。 有的話將其他資料由詞庫中填入 TsiInfo 中。
int tsidb->CursorSet(struct TsiDB *tsidb, struct TsiInfo *tsi);
將詞庫的游標設到 TsiInfo 的 tsi 所指向的地方。如果 tsi 不存在, 則指向第一筆記錄。同時也將該詞填入 TsiInfo 中。
int tsidb->CursorNext(struct TsiDB *tsidb, struct TsiInfo *tsi);
讀取下一筆詞。
int tsidb->CursorPrev(struct TsiDB *tsidb, struct TsiInfo *tsi);
讀取上一筆詞。