00001
00018
00019
00020
00021
00022
00023
00024
00025 #include <sent/stddefs.h>
00026 #include <sent/dfa.h>
00027 #include <sent/vocabulary.h>
00028
00029
00030
00038 void
00039 make_terminfo(TERM_INFO *tinfo, DFA_INFO *dinfo, WORD_INFO *winfo)
00040 {
00041 int i,w,t;
00042 int tnum;
00043
00044
00045 tnum = tinfo->term_num = dinfo->term_num;
00046
00047 tinfo->wnum = (int *)mymalloc(sizeof(int) * tnum);
00048
00049 for(i=0;i<tnum;i++) tinfo->wnum[i]=0;
00050 for(w=0;w<winfo->num;w++) {
00051 tinfo->wnum[winfo->wton[w]]++;
00052 }
00053
00054 tinfo->tw = (WORD_ID **)mymalloc(sizeof(WORD_ID *) * tnum);
00055 for(i=0;i<tnum;i++) {
00056 tinfo->tw[i] = (WORD_ID *)mymalloc(sizeof(WORD_ID) * tinfo->wnum[i]);
00057 }
00058
00059 for(i=0;i<tnum;i++) tinfo->wnum[i]=0;
00060 for(w=0;w<winfo->num;w++) {
00061 t = winfo->wton[w];
00062 tinfo->tw[t][tinfo->wnum[t]] = w;
00063 tinfo->wnum[t]++;
00064 }
00065
00066 }
00067
00074 void
00075 free_terminfo(TERM_INFO *tinfo)
00076 {
00077 int i;
00078
00079 if (tinfo->tw != NULL) {
00080 for(i=0;i<tinfo->term_num;i++) {
00081 free(tinfo->tw[i]);
00082 }
00083 free(tinfo->tw);
00084 free(tinfo->wnum);
00085 }
00086 }
00087
00096 void
00097 terminfo_append(TERM_INFO *dst, TERM_INFO *src, int coffset, int woffset)
00098 {
00099 int t, new_termnum;
00100 int i, j;
00101
00102 new_termnum = coffset + src->term_num;
00103 if (dst->tw == NULL) {
00104 dst->tw = (WORD_ID **)mymalloc(sizeof(WORD_ID *) * new_termnum);
00105 dst->wnum = (int *)mymalloc(sizeof(int) * new_termnum);
00106 } else {
00107 dst->tw = (WORD_ID **)myrealloc(dst->tw, sizeof(WORD_ID *) * new_termnum);
00108 dst->wnum = (int *)myrealloc(dst->wnum, sizeof(int) * new_termnum);
00109 }
00110 for(i=0;i<src->term_num;i++) {
00111 t = i + coffset;
00112 dst->wnum[t] = src->wnum[i];
00113 dst->tw[t] = (WORD_ID *)mymalloc(sizeof(WORD_ID) * src->wnum[i]);
00114 for(j=0;j<src->wnum[i];j++) {
00115 dst->tw[t][j] = src->tw[i][j] + woffset;
00116 }
00117 }
00118 dst->term_num = new_termnum;
00119 }