SphinxBase  0.6
fsg_model.h
1 /* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
2 /* ====================================================================
3  * Copyright (c) 1999-2004 Carnegie Mellon University. All rights
4  * reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  *
10  * 1. Redistributions of source code must retain the above copyright
11  * notice, this list of conditions and the following disclaimer.
12  *
13  * 2. Redistributions in binary form must reproduce the above copyright
14  * notice, this list of conditions and the following disclaimer in
15  * the documentation and/or other materials provided with the
16  * distribution.
17  *
18  *
19  * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND
20  * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
23  * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30  *
31  * ====================================================================
32  *
33  */
34 
35 /*
36  * fsg_model.h -- Word-level finite state graph
37  *
38  * **********************************************
39  * CMU ARPA Speech Project
40  *
41  * Copyright (c) 2003 Carnegie Mellon University.
42  * ALL RIGHTS RESERVED.
43  * **********************************************
44  */
45 
46 
47 #ifndef __FSG_MODEL_H__
48 #define __FSG_MODEL_H__
49 
50 /* System headers. */
51 #include <stdio.h>
52 #include <string.h>
53 
54 /* SphinxBase headers. */
55 #include <sphinxbase/prim_type.h>
56 #include <sphinxbase/glist.h>
57 #include <sphinxbase/logmath.h>
58 #include <sphinxbase/bitvec.h>
59 #include <sphinxbase/hash_table.h>
61 #include <sphinxbase/sphinxbase_export.h>
62 
63 /*
64  * A single transition in the FSG.
65  */
66 typedef struct fsg_link_s {
67  int32 from_state;
68  int32 to_state;
69  int32 logs2prob;
70  int32 wid;
71 } fsg_link_t;
72 
73 /* Access macros */
74 #define fsg_link_from_state(l) ((l)->from_state)
75 #define fsg_link_to_state(l) ((l)->to_state)
76 #define fsg_link_wid(l) ((l)->wid)
77 #define fsg_link_logs2prob(l) ((l)->logs2prob)
78 
82 typedef struct trans_list_s trans_list_t;
83 
91 typedef struct fsg_model_s {
92  int refcount;
93  char *name;
94  int32 n_word;
95  int32 n_word_alloc;
96  char **vocab;
97  bitvec_t *silwords;
98  bitvec_t *altwords;
100  int32 n_state;
101  int32 start_state;
102  int32 final_state;
103  float32 lw;
107 } fsg_model_t;
108 
109 /* Access macros */
110 #define fsg_model_name(f) ((f)->name)
111 #define fsg_model_n_state(f) ((f)->n_state)
112 #define fsg_model_start_state(f) ((f)->start_state)
113 #define fsg_model_final_state(f) ((f)->final_state)
114 #define fsg_model_log(f,p) logmath_log((f)->lmath, p)
115 #define fsg_model_lw(f) ((f)->lw)
116 #define fsg_model_n_word(f) ((f)->n_word)
117 #define fsg_model_word_str(f,wid) (wid == -1 ? "(NULL)" : (f)->vocab[wid])
118 
122 typedef struct fsg_arciter_s fsg_arciter_t;
123 
127 #define fsg_model_has_sil(f) ((f)->silwords != NULL)
128 
132 #define fsg_model_has_alt(f) ((f)->altwords != NULL)
133 
134 #define fsg_model_is_filler(f,wid) \
135  (fsg_model_has_sil(f) ? bitvec_is_set((f)->silwords, wid) : FALSE)
136 #define fsg_model_is_alt(f,wid) \
137  (fsg_model_has_alt(f) ? bitvec_is_set((f)->altwords, wid) : FALSE)
138 
142 SPHINXBASE_EXPORT
143 fsg_model_t *fsg_model_init(char const *name, logmath_t *lmath,
144  float32 lw, int32 n_state);
145 
185 SPHINXBASE_EXPORT
186 fsg_model_t *fsg_model_readfile(const char *file, logmath_t *lmath, float32 lw);
187 
191 SPHINXBASE_EXPORT
192 fsg_model_t *fsg_model_read(FILE *fp, logmath_t *lmath, float32 lw);
193 
199 SPHINXBASE_EXPORT
200 fsg_model_t *fsg_model_retain(fsg_model_t *fsg);
201 
207 SPHINXBASE_EXPORT
208 int fsg_model_free(fsg_model_t *fsg);
209 
215 SPHINXBASE_EXPORT
216 int fsg_model_word_add(fsg_model_t *fsg, char const *word);
217 
223 SPHINXBASE_EXPORT
224 int fsg_model_word_id(fsg_model_t *fsg, char const *word);
225 
232 SPHINXBASE_EXPORT
233 void fsg_model_trans_add(fsg_model_t * fsg,
234  int32 from, int32 to, int32 logp, int32 wid);
235 
246 SPHINXBASE_EXPORT
247 int32 fsg_model_null_trans_add(fsg_model_t * fsg, int32 from, int32 to, int32 logp);
248 
263 SPHINXBASE_EXPORT
264 int32 fsg_model_tag_trans_add(fsg_model_t * fsg, int32 from, int32 to,
265  int32 logp, int32 wid);
266 
273 SPHINXBASE_EXPORT
274 glist_t fsg_model_null_trans_closure(fsg_model_t * fsg, glist_t nulls);
275 
279 SPHINXBASE_EXPORT
280 glist_t fsg_model_trans(fsg_model_t *fsg, int32 i, int32 j);
281 
285 SPHINXBASE_EXPORT
286 fsg_arciter_t *fsg_model_arcs(fsg_model_t *fsg, int32 i);
287 
291 SPHINXBASE_EXPORT
292 fsg_link_t *fsg_arciter_get(fsg_arciter_t *itor);
293 
297 SPHINXBASE_EXPORT
298 fsg_arciter_t *fsg_arciter_next(fsg_arciter_t *itor);
299 
303 SPHINXBASE_EXPORT
304 void fsg_arciter_free(fsg_arciter_t *itor);
308 SPHINXBASE_EXPORT
309 fsg_link_t *fsg_model_null_trans(fsg_model_t *fsg, int32 i, int32 j);
310 
317 SPHINXBASE_EXPORT
318 int fsg_model_add_silence(fsg_model_t * fsg, char const *silword,
319  int state, float32 silprob);
320 
324 SPHINXBASE_EXPORT
325 int fsg_model_add_alt(fsg_model_t * fsg, char const *baseword,
326  char const *altword);
327 
331 SPHINXBASE_EXPORT
332 void fsg_model_write(fsg_model_t *fsg, FILE *fp);
333 
337 SPHINXBASE_EXPORT
338 void fsg_model_writefile(fsg_model_t *fsg, char const *file);
339 
343 SPHINXBASE_EXPORT
344 void fsg_model_write_fsm(fsg_model_t *fsg, FILE *fp);
345 
349 SPHINXBASE_EXPORT
350 void fsg_model_writefile_fsm(fsg_model_t *fsg, char const *file);
351 
355 SPHINXBASE_EXPORT
356 void fsg_model_write_symtab(fsg_model_t *fsg, FILE *file);
357 
361 SPHINXBASE_EXPORT
362 void fsg_model_writefile_symtab(fsg_model_t *fsg, char const *file);
363 
364 #endif /* __FSG_MODEL_H__ */
int32 start_state
Must be in the range [0..n_state-1].
Definition: fsg_model.h:101
int refcount
Reference count.
Definition: fsg_model.h:92
int32 final_state
Must be in the range [0..n_state-1].
Definition: fsg_model.h:102
int32 n_word_alloc
Number of words allocated in vocab.
Definition: fsg_model.h:95
float32 lw
Language weight that's been applied to transition logprobs.
Definition: fsg_model.h:103
listelem_alloc_t * link_alloc
Allocator for FSG links.
Definition: fsg_model.h:106
int32 n_word
Number of unique words in this FSG.
Definition: fsg_model.h:94
A node in a generic list.
Definition: glist.h:100
Basic type definitions used in Sphinx.
Adjacency list (opaque) for a state in an FSG.
Definition: fsg_model.c:63
Fast linked list allocator.
Implementation of arc iterator.
Definition: fsg_model.c:71
Fast memory allocator for uniformly sized objects.
Generic linked-lists maintenance.
int32 n_state
number of states in FSG
Definition: fsg_model.h:100
bitvec_t * altwords
Indicates which words are pronunciation alternates.
Definition: fsg_model.h:98
trans_list_t * trans
Transitions out of each state, if any.
Definition: fsg_model.h:105
Hash table implementation.
Word level FSG definition.
Definition: fsg_model.h:91
bitvec_t * silwords
Indicates which words are silence/fillers.
Definition: fsg_model.h:97
Fast integer logarithmic addition operations.
An implementation of bit vectors.
logmath_t * lmath
Pointer to log math computation object.
Definition: fsg_model.h:99
char * name
A unique string identifier for this FSG.
Definition: fsg_model.h:93
char ** vocab
Vocabulary for this FSG.
Definition: fsg_model.h:96