mkterminfo.c
来自「julius version 4.12.about sound recognit」· C语言 代码 · 共 120 行
C
120 行
/** * @file mkterminfo.c * * <JA> * @brief カテゴリごとの帽胳のリストを侯喇する * </JA> * * <EN> * @brief Make a word list for each category * </EN> * * @author Akinobu LEE * @date Tue Feb 15 14:47:27 2005 * * $Revision: 1.2 $ * *//* * Copyright (c) 1991-2007 Kawahara Lab., Kyoto University * Copyright (c) 2000-2005 Shikano Lab., Nara Institute of Science and Technology * Copyright (c) 2005-2007 Julius project team, Nagoya Institute of Technology * All rights reserved */#include <sent/stddefs.h>#include <sent/dfa.h>#include <sent/vocabulary.h>/* construct table: terminal(category) ID -> word list *//** * Make a word list for each category. * * @param tinfo [i/o] terminal data structure to hold the result * @param dinfo [in] DFA gammar to supply the number of category in the grammar * @param winfo [in] word dictionary. */voidmake_terminfo(TERM_INFO *tinfo, DFA_INFO *dinfo, WORD_INFO *winfo){ int i,w,t; int tnum; /* set terminal number */ tnum = tinfo->term_num = dinfo->term_num; /* allocate memory for the list of word num */ tinfo->wnum = (int *)mymalloc(sizeof(int) * tnum); /* count number of belonging words for each category */ for(i=0;i<tnum;i++) tinfo->wnum[i]=0; for(w=0;w<winfo->num;w++) { tinfo->wnum[winfo->wton[w]]++; } /* allocate memory for the list body */ tinfo->tw = (WORD_ID **)mymalloc(sizeof(WORD_ID *) * tnum); for(i=0;i<tnum;i++) { tinfo->tw[i] = (WORD_ID *)mymalloc(sizeof(WORD_ID) * tinfo->wnum[i]); } /* store the word to each corresponding list */ for(i=0;i<tnum;i++) tinfo->wnum[i]=0; for(w=0;w<winfo->num;w++) { t = winfo->wton[w]; tinfo->tw[t][tinfo->wnum[t]] = w; tinfo->wnum[t]++; }}/** * Free word list for each category. * * @param tinfo [in] terminal data structure holding the content. * */voidfree_terminfo(TERM_INFO *tinfo){ int i; if (tinfo->tw != NULL) { for(i=0;i<tinfo->term_num;i++) { free(tinfo->tw[i]); } free(tinfo->tw); free(tinfo->wnum); }}/** * Append the terminal(category) word list. * * @param dst [i/o] category data * @param src [i/o] category data to be appended to @a dst * @param coffset [in] category id offset in @a dst where the new data should be stored * @param woffset [in] word id offset where the new data should be stored */voidterminfo_append(TERM_INFO *dst, TERM_INFO *src, int coffset, int woffset){ int t, new_termnum; int i, j; new_termnum = coffset + src->term_num; if (dst->tw == NULL) { dst->tw = (WORD_ID **)mymalloc(sizeof(WORD_ID *) * new_termnum); dst->wnum = (int *)mymalloc(sizeof(int) * new_termnum); } else { dst->tw = (WORD_ID **)myrealloc(dst->tw, sizeof(WORD_ID *) * new_termnum); dst->wnum = (int *)myrealloc(dst->wnum, sizeof(int) * new_termnum); } for(i=0;i<src->term_num;i++) { t = i + coffset; dst->wnum[t] = src->wnum[i]; dst->tw[t] = (WORD_ID *)mymalloc(sizeof(WORD_ID) * src->wnum[i]); for(j=0;j<src->wnum[i];j++) { dst->tw[t][j] = src->tw[i][j] + woffset; } } dst->term_num = new_termnum;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?