29     using namespace kaldi;
    31     typedef kaldi::int64 int64;
    32     using fst::SymbolTable;
    37         "Composes lattices (in transducer form, as type Lattice).  Depending\n"    38         "on the command-line arguments, either composes lattices with lattices,\n"    39         "or lattices with FSTs (rspecifiers are assumed to be lattices, and\n"    40         "rxfilenames are assumed to be FSTs, which have their weights interpreted\n"    41         "as \"graph weights\" when converted into the Lattice format.\n"    43         "Usage: lattice-compose [options] lattice-rspecifier1 "    44         "(lattice-rspecifier2|fst-rxfilename2) lattice-wspecifier\n"    45         " e.g.: lattice-compose ark:1.lats ark:2.lats ark:composed.lats\n"    46         " or: lattice-compose ark:1.lats G.fst ark:composed.lats\n";
    50     bool write_compact = 
true;
    51     int32 num_states_cache = 50000;
    52     int32 phi_label = fst::kNoLabel; 
    53     po.Register(
"write-compact", &write_compact, 
"If true, write in normal (compact) form.");
    54     po.Register(
"phi-label", &phi_label, 
"If >0, the label on backoff arcs of the LM");
    55     po.Register(
"num-states-cache", &num_states_cache,
    56                 "Number of states we cache when mapping LM FST to lattice type. "    57                 "More -> more memory but faster.");
    60     if (po.NumArgs() != 3) {
    65     KALDI_ASSERT(phi_label > 0 || phi_label == fst::kNoLabel); 
    67     std::string lats_rspecifier1 = po.GetArg(1),
    69         lats_wspecifier = po.GetArg(3);
    70     int32 n_done = 0, n_fail = 0;
    78       compact_lattice_writer.
Open(lats_wspecifier);
    80       lattice_writer.
Open(lats_wspecifier);
    83       std::string fst_rxfilename = arg2;
    88       if (fst2->Properties(fst::kILabelSorted, 
true) == 0) {
    90         fst::ILabelCompare<StdArc> ilabel_comp;
    91         ArcSort(fst2, ilabel_comp);
    96       fst::CacheOptions cache_opts(
true, num_states_cache);
    97       fst::MapFstOptions mapfst_opts(cache_opts);
    99       fst::MapFst<StdArc, LatticeArc, fst::StdToLatticeMapper<BaseFloat> >
   100           mapped_fst2(*fst2, mapper, mapfst_opts);
   101       for (; !lattice_reader1.Done(); lattice_reader1.Next()) {
   102         std::string key = lattice_reader1.Key();
   103         KALDI_VLOG(1) << 
"Processing lattice for key " << key;
   104         Lattice lat1 = lattice_reader1.Value();
   105         ArcSort(&lat1, fst::OLabelCompare<LatticeArc>());
   107         if (phi_label > 0) 
PhiCompose(lat1, mapped_fst2, phi_label, &composed_lat);
   108         else Compose(lat1, mapped_fst2, &composed_lat);
   109         if (composed_lat.Start() == fst::kNoStateId) {
   110           KALDI_WARN << 
"Empty lattice for utterance " << key << 
" (incompatible LM?)";
   116             compact_lattice_writer.
Write(key, clat);
   118             lattice_writer.
Write(key, composed_lat);
   125       std::string lats_rspecifier2 = arg2;
   131       for (; !lattice_reader1.Done(); lattice_reader1.Next()) {
   132         std::string key = lattice_reader1.Key();
   133         KALDI_VLOG(1) << 
"Processing lattice for key " << key;
   134         Lattice lat1 = lattice_reader1.Value();
   135         lattice_reader1.FreeCurrent();
   136         if (!lattice_reader2.HasKey(key)) {
   137           KALDI_WARN << 
"Not producing output for utterance " << key
   138                      << 
" because not present in second table.";
   142         Lattice lat2 = lattice_reader2.Value(key);
   146         if (lat2.Properties(fst::kILabelSorted, 
true) == 0
   147             && lat1.Properties(fst::kOLabelSorted, 
true) == 0) {
   149           fst::ILabelCompare<LatticeArc> ilabel_comp;
   150           fst::ArcSort(&lat2, ilabel_comp);
   158           Compose(lat1, lat2, &lat_out);
   160         if (lat_out.Start() == fst::kNoStateId) {
   161           KALDI_WARN << 
"Empty lattice for utterance " << key << 
" (incompatible LM?)";
   167             compact_lattice_writer.
Write(key, clat_out);
   169             lattice_writer.
Write(key, lat_out);
   176     KALDI_LOG << 
"Done " << n_done << 
" lattices; failed for "   178     return (n_done != 0 ? 0 : 1);
   179   } 
catch(
const std::exception &e) {
   180     std::cerr << e.what();
 This code computes Goodness of Pronunciation (GOP) and extracts phone-level pronunciation feature for...
 
bool Open(const std::string &wspecifier)
 
void PropagateFinal(typename Arc::Label phi_label, MutableFst< Arc > *fst)
 
void PhiCompose(const Fst< Arc > &fst1, const Fst< Arc > &fst2, typename Arc::Label phi_label, MutableFst< Arc > *ofst)
 
A templated class for writing objects to an archive or script file; see The Table concept...
 
void Write(const std::string &key, const T &value) const
 
RspecifierType ClassifyRspecifier(const std::string &rspecifier, std::string *rxfilename, RspecifierOptions *opts)
 
Allows random access to a collection of objects in an archive or script file; see The Table concept...
 
The class ParseOptions is for parsing command-line options; see Parsing command-line options for more...
 
void ConvertLattice(const ExpandedFst< ArcTpl< Weight > > &ifst, MutableFst< ArcTpl< CompactLatticeWeightTpl< Weight, Int > > > *ofst, bool invert)
Convert lattice from a normal FST to a CompactLattice FST. 
 
A templated class for reading objects sequentially from an archive or script file; see The Table conc...
 
fst::VectorFst< LatticeArc > Lattice
 
fst::VectorFst< CompactLatticeArc > CompactLattice
 
#define KALDI_ASSERT(cond)
 
Class StdToLatticeMapper maps a normal arc (StdArc) to a LatticeArc by putting the StdArc weight as t...
 
void ReadFstKaldi(std::istream &is, bool binary, VectorFst< Arc > *fst)