Julius 4.2
|
00001 00018 /* 00019 * Copyright (c) 1991-2011 Kawahara Lab., Kyoto University 00020 * Copyright (c) 2000-2005 Shikano Lab., Nara Institute of Science and Technology 00021 * Copyright (c) 2005-2011 Julius project team, Nagoya Institute of Technology 00022 * All rights reserved 00023 */ 00024 00025 #include <sent/stddefs.h> 00026 #include <sent/dfa.h> 00027 #include <sent/vocabulary.h> 00028 00029 /* construct table: terminal(category) ID -> word list */ 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 /* set terminal number */ 00045 tnum = tinfo->term_num = dinfo->term_num; 00046 /* allocate memory for the list of word num */ 00047 tinfo->wnum = (int *)mymalloc(sizeof(int) * tnum); 00048 /* count number of belonging words for each category */ 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 /* allocate memory for the list body */ 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 /* store the word to each corresponding list */ 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 }