Next Previous Contents

6.

6.1 前言

在這套函式庫中,詞是最重要的處理階段。對中文語言來說, 詞跟英文中的單字一樣,都是具有意義的最小單位。但是跟英文不同的是, 中文的詞與詞間沒有明顯的分隔,或是說像英文中的空白一樣, 可以區隔兩個單字的分隔符號。

因此,我們需要斷詞。斷詞能將一串中文字中的詞分隔出來。

中文的斷詞目前都是採用比對詞庫的方式來作, 所以一個足夠大且效率好的詞庫是需要的。 所以,libtabe 中用 Berkeley DB 來管理詞庫,如此一來,既使詞庫很大時, 也還能維持很好的效能。

6.2 tabeTsiInfoLookupPossibleYin()

int tabeBig5TsiLookupPossibleTsiYin(struct TsiInfo *tsi);
查出 TsiInfo 中的 tsi 這個字串所有的詞音。 詞音的總數存在 TsiInfo 的 yinnum 中,yindata 則是這些詞音,連續存放。

6.3 tabeTsiDBOpen()

struct TsiDB *tabeTsiDBOpen(int type, const char *db_name, int flags);

開啟一個詞庫。type 是詞庫的種類,目前只有 DB_TYPE_DB 一種, 也就是用 Berkeley DB。flags 是這個資料庫的一些特性,如下:

傳回的 TsiDB 就是當呼叫其他詞庫處理函數時第一個參數。

6.4 tsidb->Close()

void tsidb->Close(struct TsiDB *tsidb);

關閉詞庫。

6.5 tsidb->RecordNumber()

int tsidb->RecordNumber(struct TsiDB *tsidb);

查詢該詞庫中共有多少筆詞。

6.6 tsidb->Put()

int tsidb->Put(struct TsiDB *tsidb, struct TsiInfo *tsi);

將 TsiInfo 中的 tsi、refcount、yinnum、yindata 存入詞庫中。

6.7 tsidb->Get()

int tsidb->Get(struct TsiDB *tsidb, struct TsiInfo *tsi);

查詢詞庫中是否有 TsiInfo 中的 tsi 這個詞。 有的話將其他資料由詞庫中填入 TsiInfo 中。

6.8 tsidb->CursorSet()

int tsidb->CursorSet(struct TsiDB *tsidb, struct TsiInfo *tsi);

將詞庫的游標設到 TsiInfo 的 tsi 所指向的地方。如果 tsi 不存在, 則指向第一筆記錄。同時也將該詞填入 TsiInfo 中。

6.9 tsidb->CursorNext()

int tsidb->CursorNext(struct TsiDB *tsidb, struct TsiInfo *tsi);

讀取下一筆詞。

6.10 tsidb->CursorPrev()

int tsidb->CursorPrev(struct TsiDB *tsidb, struct TsiInfo *tsi);

讀取上一筆詞。


Next Previous Contents