00001
00017
00018
00019
00020
00021
00022
00023
00024 #include <sent/stddefs.h>
00025 #include <sent/dfa.h>
00026 #include <sent/vocabulary.h>
00027
00028
00029
00037 void
00038 make_terminfo(TERM_INFO *tinfo, DFA_INFO *dinfo, WORD_INFO *winfo)
00039 {
00040 int i,w,t;
00041 int tnum;
00042
00043
00044 tnum = tinfo->term_num = dinfo->term_num;
00045
00046 tinfo->wnum = (int *)mymalloc(sizeof(int) * tnum);
00047
00048 for(i=0;i<tnum;i++) tinfo->wnum[i]=0;
00049 for(w=0;w<winfo->num;w++) {
00050 tinfo->wnum[winfo->wton[w]]++;
00051 }
00052
00053 tinfo->tw = (WORD_ID **)mymalloc(sizeof(WORD_ID *) * tnum);
00054 for(i=0;i<tnum;i++) {
00055 tinfo->tw[i] = (WORD_ID *)mymalloc(sizeof(WORD_ID) * tinfo->wnum[i]);
00056 }
00057
00058 for(i=0;i<tnum;i++) tinfo->wnum[i]=0;
00059 for(w=0;w<winfo->num;w++) {
00060 t = winfo->wton[w];
00061 tinfo->tw[t][tinfo->wnum[t]] = w;
00062 tinfo->wnum[t]++;
00063 }
00064
00065 }
00066
00075 void
00076 terminfo_append(TERM_INFO *dst, TERM_INFO *src, int coffset, int woffset)
00077 {
00078 int t, new_termnum;
00079 int i, j;
00080
00081 new_termnum = coffset + src->term_num;
00082 if (dst->tw == NULL) {
00083 dst->tw = (WORD_ID **)mymalloc(sizeof(WORD_ID *) * new_termnum);
00084 dst->wnum = (int *)mymalloc(sizeof(int) * new_termnum);
00085 } else {
00086 dst->tw = (WORD_ID **)myrealloc(dst->tw, sizeof(WORD_ID *) * new_termnum);
00087 dst->wnum = (int *)myrealloc(dst->wnum, sizeof(int) * new_termnum);
00088 }
00089 for(i=0;i<src->term_num;i++) {
00090 t = i + coffset;
00091 dst->wnum[t] = src->wnum[i];
00092 dst->tw[t] = (WORD_ID *)mymalloc(sizeof(WORD_ID) * src->wnum[i]);
00093 for(j=0;j<src->wnum[i];j++) {
00094 dst->tw[t][j] = src->tw[i][j] + woffset;
00095 }
00096 }
00097 dst->term_num = new_termnum;
00098 }