// 'loop_fst' will be an acceptor FST with single (initial and final) state, with
// a loop for each phone and disambiguation symbol.
StdVectorFst loop_fst;
loop_fst.AddState(); // Add state zero.
loop_fst.SetStart(0);
loop_fst.SetFinal(0, TropicalWeight::One());
for (size_t i = 0; i < phone_syms.size(); i++) {
int32 sym = phone_syms[i];
loop_fst.AddArc(0, StdArc(sym, sym, TropicalWeight::One(), 0));
}
Which means variable 'phone_syms' should includes phone and disambiguation symbols.
So grep -v "#\\$" phones.txt should work, Or change the example to "echo "$ 5""
I think following cmd is incorrect as the 'fstmakecontextfst' needs a phone list that includes disambiguation symbols.
But this filter rule will remove all disambiguation symbols(&0, &1) and subsequential-symbol("#$")
https://github.com/kaldi-asr/kaldi/blob/master/src/fstbin/fstmakecontextfst.cc#L113 The code is :
// 'loop_fst' will be an acceptor FST with single (initial and final) state, with // a loop for each phone and disambiguation symbol. StdVectorFst loop_fst; loop_fst.AddState(); // Add state zero. loop_fst.SetStart(0); loop_fst.SetFinal(0, TropicalWeight::One()); for (size_t i = 0; i < phone_syms.size(); i++) { int32 sym = phone_syms[i]; loop_fst.AddArc(0, StdArc(sym, sym, TropicalWeight::One(), 0)); }
grep -v "#\\$" phones.txt
should work, Or change the example to "echo "$ 5""