⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 word_fsg.h

📁 WinCE平台上的语音识别程序
💻 H
字号:
/* ==================================================================== * Copyright (c) 1999-2004 Carnegie Mellon University.  All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer.  * * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in *    the documentation and/or other materials provided with the *    distribution. * * * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND  * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * ==================================================================== * *//* * word_fsg.h -- Word-level finite state graph *  * ********************************************** * CMU ARPA Speech Project * * Copyright (c) 2003 Carnegie Mellon University. * ALL RIGHTS RESERVED. * ********************************************** */#ifndef __S2_WORD_FSG_H__#define __S2_WORD_FSG_H__#include <stdio.h>#include <string.h>#include <s2types.h>#include <glist.h>#include <fbs.h>/* * A single transition in the FSG. */typedef struct word_fsglink_s {  int32 from_state;  int32 to_state;  int32 wid;		/* Word-ID; <0 if epsilon or null transition */  int32 logs2prob;	/* logs2(transition probability)*lw */} word_fsglink_t;/* Access macros */#define word_fsglink_from_state(l)	((l)->from_state)#define word_fsglink_to_state(l)	((l)->to_state)#define word_fsglink_wid(l)		((l)->wid)#define word_fsglink_logs2prob(l)	((l)->logs2prob)/* * Word level FSG definition. * States are simply integers 0..n_state-1. * A transition emits a word and has a given probability of being taken. * There can also be null or epsilon transitions, with no associated emitted * word. */typedef struct word_fsg_s {  char *name;		/* A unique string identifier for this FSG */  int32 n_state;	/* #states in FSG */  int32 start_state;	/* Must be in the range [0..n_state-1] */  int32 final_state;	/* Must be in the range [0..n_state-1] */  boolean use_altpron;	/* Whether transitions for alternative pronunciations			   have been added to the FSG */  boolean use_filler;	/* Whether silence and noise filler-word transitions			   have been added at each state */  float32 lw;		/* Language weight that's been applied to transition			   logprobs */  glist_t **trans;	/* trans[i][j] = glist of non-epsilon transitions or			   links (word_fsglink_t *) from state i to state j,			   if any; NULL if none. */  word_fsglink_t ***null_trans;	/* null_trans[i][j] = epsilon or null link				   from state i to j, if any; NULL if none.				   (At most one null transition between two				   given states.) */  /*   * Left and right CIphone sets for each state.   * Left context CIphones for a state S: If word W transitions into S, W's   * final CIphone is in S's {lc}.  Words transitioning out of S must consider   * these left context CIphones.   * Similarly, right contexts for state S: If word W transitions out of S,   * W's first CIphone is in S's {rc}.  Words transitioning into S must consider   * these right contexts.   *    * NOTE: Words may transition into and out of S INDIRECTLY, with intermediate   *   null transitions.   * NOTE: Single-phone words are difficult; only SILENCE right context is   *   modelled for them.   * NOTE: Non-silence filler phones aren't included in these sets.  Filler   *   words don't use context, and present the SILENCE phone as context to   *   adjacent words.   */  int8 **rc, **lc;} word_fsg_t;/* Access macros */#define word_fsg_name(f)		((f)->name)#define word_fsg_n_state(f)		((f)->n_state)#define word_fsg_start_state(f)		((f)->start_state)#define word_fsg_final_state(f)		((f)->final_state)#define word_fsg_lw(f)			((f)->lw)#define word_fsg_use_altpron(f)		((f)->use_altpron)#define word_fsg_use_filler(f)		((f)->use_filler)#define word_fsg_trans(f,i,j)		((f)->trans[i][j])#define word_fsg_null_trans(f,i,j)	((f)->null_trans[i][j])#define word_fsg_lc(f,s)		((f)->lc[s])#define word_fsg_rc(f,s)		((f)->rc[s])/* * Read a word FSG from the given file and return a pointer to the structure * created.  Return NULL if any error occurred. *  * File format: *  *   Any number of comment lines; ignored *   FSG_BEGIN [<fsgname>] *   N <#states> *   S <start-state ID> *   F <final-state ID> *   T <from-state> <to-state> <prob> [<word-string>] *   T ... *   ... (any number of state transitions) *   FSG_END *   Any number of comment lines; ignored *  * The FSG spec begins with the line containing the keyword FSG_BEGIN. * It has an optional fsg name string.  If not present, the FSG has the empty * string as its name. *  * Following the FSG_BEGIN declaration is the number of states, the start * state, and the final state, each on a separate line.  States are numbered * in the range [0 .. <numberofstate>-1]. *  * These are followed by all the state transitions, each on a separate line, * and terminated by the FSG_END line.  A state transition has the given * probability of being taken, and emits the given word.  The word emission * is optional; if word-string omitted, it is an epsilon or null transition. *  * Comments can also be embedded within the FSG body proper (i.e. between * FSG_BEGIN and FSG_END): any line with a # character in col 1 is treated * as a comment line. *  * Other arguments: * - use_altpron: if TRUE, if a transition labelled W exists between two *   states, all the alternative pronunciations of W (in the dictionary) are *   also added as transitions with the same given probability. * - use_filler: if TRUE, a separate transition for each silence and noise *   filler word in the lexicon is added at each state (loop transition). *   However, if noiseword penalty is 0.0, noise words are ignored. * - silprob: transition prob for silence word transitions (if use_filler) * - fillprob: transition prob for noise word transitions (if use_filler) * - lw: language weight, applied as a multiplicative factor to the LOG of *   the transition probs. *  * Return value: a new word_fsg_t structure if the file is successfully * read, NULL otherwise. */word_fsg_t *word_fsg_readfile (char *file,			       boolean use_altpron, boolean use_filler,			       float32 silprob, float32 fillprob,			       float32 lw);/* * Like word_fsg_readfile(), but from an already open stream. */word_fsg_t *word_fsg_read (FILE *fp,			   boolean use_altpron, boolean use_filler,			   float32 silprob, float32 fillprob,			   float32 lw);/* * Like word_fsg_read(), but from an in-memory structure. */word_fsg_t *word_fsg_load (s2_fsg_t *s2_fsg,			   boolean use_altpron, boolean use_filler,			   float32 silprob, float32 fillprob,			   float32 lw);/* * Write the given fsg structure to the given file. * (This needs options for writing in format readable by word_fsg_read().) */void word_fsg_writefile (word_fsg_t *fsg, char *file);/* * Like word_fsg_writefile(), but to an already open stream. */void word_fsg_write (word_fsg_t *fsg, FILE *fp);/* * Free the given word FSG */void word_fsg_free(word_fsg_t *);/* * Set the FSG start state (or the final state) to the given state. * Return value: -1 if there was any error, otherwise the previous start * state (or final state). */int32 word_fsg_set_start_state (word_fsg_t *fsg, int32 new_start_state);int32 word_fsg_set_final_state (word_fsg_t *fsg, int32 new_final_state);#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -