SphinxBase 5prealpha
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. */
56#include <sphinxbase/glist.h>
57#include <sphinxbase/logmath.h>
58#include <sphinxbase/bitvec.h>
61#include <sphinxbase/sphinxbase_export.h>
62
63#ifdef __cplusplus
64extern "C" {
65#endif
66#if 0
67/* Fool Emacs. */
68}
69#endif
70
71/*
72 * A single transition in the FSG.
73 */
74typedef struct fsg_link_s {
75 int32 from_state;
76 int32 to_state;
77 int32 logs2prob;
78 int32 wid;
80
81/* Access macros */
82#define fsg_link_from_state(l) ((l)->from_state)
83#define fsg_link_to_state(l) ((l)->to_state)
84#define fsg_link_wid(l) ((l)->wid)
85#define fsg_link_logs2prob(l) ((l)->logs2prob)
86
90typedef struct trans_list_s trans_list_t;
91
99typedef struct fsg_model_s {
101 char *name;
102 int32 n_word;
104 char **vocab;
105 bitvec_t *silwords;
106 bitvec_t *altwords;
108 int32 n_state;
111 float32 lw;
116
117/* Access macros */
118#define fsg_model_name(f) ((f)->name)
119#define fsg_model_n_state(f) ((f)->n_state)
120#define fsg_model_start_state(f) ((f)->start_state)
121#define fsg_model_final_state(f) ((f)->final_state)
122#define fsg_model_log(f,p) logmath_log((f)->lmath, p)
123#define fsg_model_lw(f) ((f)->lw)
124#define fsg_model_n_word(f) ((f)->n_word)
125#define fsg_model_word_str(f,wid) (wid == -1 ? "(NULL)" : (f)->vocab[wid])
126
130typedef struct fsg_arciter_s fsg_arciter_t;
131
135#define fsg_model_has_sil(f) ((f)->silwords != NULL)
136
140#define fsg_model_has_alt(f) ((f)->altwords != NULL)
141
142#define fsg_model_is_filler(f,wid) \
143 (fsg_model_has_sil(f) ? bitvec_is_set((f)->silwords, wid) : FALSE)
144#define fsg_model_is_alt(f,wid) \
145 (fsg_model_has_alt(f) ? bitvec_is_set((f)->altwords, wid) : FALSE)
146
150SPHINXBASE_EXPORT
151fsg_model_t *fsg_model_init(char const *name, logmath_t *lmath,
152 float32 lw, int32 n_state);
153
193SPHINXBASE_EXPORT
194fsg_model_t *fsg_model_readfile(const char *file, logmath_t *lmath, float32 lw);
195
199SPHINXBASE_EXPORT
200fsg_model_t *fsg_model_read(FILE *fp, logmath_t *lmath, float32 lw);
201
207SPHINXBASE_EXPORT
208fsg_model_t *fsg_model_retain(fsg_model_t *fsg);
209
215SPHINXBASE_EXPORT
216int fsg_model_free(fsg_model_t *fsg);
217
223SPHINXBASE_EXPORT
224int fsg_model_word_add(fsg_model_t *fsg, char const *word);
225
231SPHINXBASE_EXPORT
232int fsg_model_word_id(fsg_model_t *fsg, char const *word);
233
240SPHINXBASE_EXPORT
241void fsg_model_trans_add(fsg_model_t * fsg,
242 int32 from, int32 to, int32 logp, int32 wid);
243
254SPHINXBASE_EXPORT
255int32 fsg_model_null_trans_add(fsg_model_t * fsg, int32 from, int32 to, int32 logp);
256
271SPHINXBASE_EXPORT
272int32 fsg_model_tag_trans_add(fsg_model_t * fsg, int32 from, int32 to,
273 int32 logp, int32 wid);
274
281SPHINXBASE_EXPORT
282glist_t fsg_model_null_trans_closure(fsg_model_t * fsg, glist_t nulls);
283
287SPHINXBASE_EXPORT
288glist_t fsg_model_trans(fsg_model_t *fsg, int32 i, int32 j);
289
293SPHINXBASE_EXPORT
294fsg_arciter_t *fsg_model_arcs(fsg_model_t *fsg, int32 i);
295
299SPHINXBASE_EXPORT
300fsg_link_t *fsg_arciter_get(fsg_arciter_t *itor);
301
305SPHINXBASE_EXPORT
306fsg_arciter_t *fsg_arciter_next(fsg_arciter_t *itor);
307
311SPHINXBASE_EXPORT
312void fsg_arciter_free(fsg_arciter_t *itor);
316SPHINXBASE_EXPORT
317fsg_link_t *fsg_model_null_trans(fsg_model_t *fsg, int32 i, int32 j);
318
325SPHINXBASE_EXPORT
326int fsg_model_add_silence(fsg_model_t * fsg, char const *silword,
327 int state, float32 silprob);
328
332SPHINXBASE_EXPORT
333int fsg_model_add_alt(fsg_model_t * fsg, char const *baseword,
334 char const *altword);
335
339SPHINXBASE_EXPORT
340void fsg_model_write(fsg_model_t *fsg, FILE *fp);
341
345SPHINXBASE_EXPORT
346void fsg_model_writefile(fsg_model_t *fsg, char const *file);
347
351SPHINXBASE_EXPORT
352void fsg_model_write_fsm(fsg_model_t *fsg, FILE *fp);
353
357SPHINXBASE_EXPORT
358void fsg_model_writefile_fsm(fsg_model_t *fsg, char const *file);
359
363SPHINXBASE_EXPORT
364void fsg_model_write_symtab(fsg_model_t *fsg, FILE *file);
365
369SPHINXBASE_EXPORT
370void fsg_model_writefile_symtab(fsg_model_t *fsg, char const *file);
371
372#ifdef __cplusplus
373}
374#endif
375
376#endif /* __FSG_MODEL_H__ */
An implementation of bit vectors.
Generic linked-lists maintenance.
Hash table implementation.
Fast memory allocator for uniformly sized objects.
Fast integer logarithmic addition operations.
Basic type definitions used in Sphinx.
Implementation of arc iterator.
Definition: fsg_model.c:64
Word level FSG definition.
Definition: fsg_model.h:99
int32 n_word_alloc
Number of words allocated in vocab.
Definition: fsg_model.h:103
int32 start_state
Must be in the range [0..n_state-1].
Definition: fsg_model.h:109
char ** vocab
Vocabulary for this FSG.
Definition: fsg_model.h:104
int32 n_state
number of states in FSG
Definition: fsg_model.h:108
int32 n_word
Number of unique words in this FSG.
Definition: fsg_model.h:102
logmath_t * lmath
Pointer to log math computation object.
Definition: fsg_model.h:107
char * name
A unique string identifier for this FSG.
Definition: fsg_model.h:101
bitvec_t * silwords
Indicates which words are silence/fillers.
Definition: fsg_model.h:105
listelem_alloc_t * link_alloc
Allocator for FSG links.
Definition: fsg_model.h:114
trans_list_t * trans
Transitions out of each state, if any.
Definition: fsg_model.h:113
int32 final_state
Must be in the range [0..n_state-1].
Definition: fsg_model.h:110
bitvec_t * altwords
Indicates which words are pronunciation alternates.
Definition: fsg_model.h:106
float32 lw
Language weight that's been applied to transition logprobs.
Definition: fsg_model.h:111
int refcount
Reference count.
Definition: fsg_model.h:100
A node in a generic list.
Definition: glist.h:100
Fast linked list allocator.
Adjacency list (opaque) for a state in an FSG.
Definition: fsg_model.c:56