#define M_JUZI 200
// 樹圖的鏈表驗證結構
// 用圖的鏈式存儲來構造樹,子樹均記錄串的靜態位置(索引)
typedef struct ST_FenCi{
int LeiBie; // 連什麽類別?1 : 韻母,2 : 聲母
int SuoYin; // 聲母後的韻母索引 或者 詞語中韻母後壹個字的聲母索引
struct ST_FenCi *pN; // 兄弟
} FenCi;
typedef struct ST_Ci{
int SuoYin; // 在原始串內的子串(字)索引
int Chang; // 子串長度
} Ci; // 記錄結果的結構
typedef struct ST_ShengMu {
char Pin[3]; // 聲母字符串
FenCi *pLian; // 分詞樹的子樹
} ShengMu; // 用來定義聲母的靜態集合
typedef struct ST_YunMu {
char Yin[5]; // 韻母字符串,區別於聲母
FenCi *pLian; // 分詞樹的子樹
} YunMu; // 用來定義韻母的靜態集合
// 聲母開字頭
ShengMu smJiHe[29] = {{""},{"b"},{"c"},{"d"},{""},{"f"},{"g"},
{"h"},{""},{"j"},{"k"},{"l"},{"m"},{"n"},
{""},{"p"},{"q"},{"r"},{"s"},{"t"},{""},
{""},{"w"},{"x"},{"y"},{"z"},{"ch"},{"sh"},{"zh"}};
// 韻母收字尾
YunMu ymJiHe[24] = {{"a"},{"o"},{"e"},{"i"},{"u"},{"v"},
{"ai"},{"ei"},{"ui"},{"ao"},{"ou"},
{"iu"},{"ie"},{"ue"},
{"er"},
{"an"},{"en"},{"in"},{"un"},{"vn"},
{"ang"},{"eng"},{"ing"},{"ong"}};
// 關於分字樹,完全可以按照“現代漢語詞典”的音節表來構造
// 某分字子樹的構造
void InitFenZiShu0() {
}
int main() {
char JuZi[M_JUZI];
//scanf("%s",JuZi);
// 算法1. 首字哈希查找,鏈表連字,鏈表連詞
// 如果需要查找的表有限,可以用if ,else,也可以用哈希查找
// 待解決的問題:
// 1.1. 聲母頭與聲母尾的混淆,兩個字頭之間至少相差三個位置
// 1.2. 韻母尾與聲母頭的混淆,上下文,回退
// 1.3. 超前搜索,首先,如果韻母可以擴展到更長的另壹個韻母,
// 1.3.1 從韻母收字的時候,
// 不僅要嘗試韻母的"擴展",而且要判斷擴展後新韻母的後綴,
// 如果這個後綴為聲母頭,那麽在聲母頭的後面是否有合適的韻母構成壹個新字?
// 如果有,就需要記錄這種可能,而且做好提前收尾的準備
// 如果沒有,理所當然要把新的韻母繼續"擴展"
// 這樣的韻母比如:e->er, a->an->ang, e->en->eng, i->in->ing, u->un,
// 這樣的聲母比如:e, r, g
// 1.3.2 從聲母找字的時候,
// 如果後面找不到聲母頭鏈表裏所有的韻母,就可以擴展匹配更長的聲母
// 算法2. 漸進地找到所有聲母點,上下文分析,修正,分析到結構,顯示
// 算法2.1 對原文的每個字,逐個匹配已知聲母
// 算法2.2 已知聲母,在壹定範圍裏搜集在原文裏出現的每個聲母點
getchar(); // enter
return 1;
}