Home | History | Annotate | Download | only in lib

Lines Matching refs:Fst

25 #include "fst/lib/arcsort.h"
26 #include "fst/lib/arcsum.h"
27 #include "fst/lib/connect.h"
28 #include "fst/lib/dfs-visit.h"
29 #include "fst/lib/encode.h"
30 #include "fst/lib/factor-weight.h"
31 #include "fst/lib/fst.h"
32 #include "fst/lib/mutable-fst.h"
33 #include "fst/lib/partition.h"
34 #include "fst/lib/push.h"
35 #include "fst/lib/queue.h"
36 #include "fst/lib/reverse.h"
38 namespace fst {
58 StateComparator(const Fst<A>& fst,
61 : fst_(fst), partition_(partition), flags_(flags) {}
80 for (ArcIterator<Fst<A> > aiter1(fst_, x), aiter2(fst_, y);
99 const Fst<A>& fst_;
124 CyclicMinimizer(const ExpandedFst<A>& fst) {
125 Initialize(fst);
126 Compute(fst);
139 typedef ArcIterator<Fst<RevA> > ArcIter;
169 void PrePartition(const Fst<A>& fst) {
173 StateComparator<A> comp(fst, P_, StateComparator<A>::kCompareFinal);
176 StateIterator<Fst<A> > siter(fst);
198 // - Create inverse transition Tr_ = rev(fst)
199 // - loop over states in fst and split on final, creating two blocks
201 void Initialize(const Fst<A>& fst) {
203 Reverse(fst, &Tr_);
211 PrePartition(fst);
226 aiter_queue_->push(new ArcIterator<Fst<RevA> >(Tr_, s + 1));
233 ArcIterator<Fst<RevA> >* aiter = aiter_queue_->top();
261 void Compute(const Fst<A>& fst) {
305 AcyclicMinimizer(const ExpandedFst<A>& fst) {
306 Initialize(fst);
307 Refine(fst);
322 void InitVisit(const Fst<A>& fst) {}
379 void Initialize(const Fst<A>& fst) {
382 DfsVisit(fst, &hvisitor);
393 void Refine(const Fst<A>& fst) {
395 StateComparator<A> comp(fst, partition_);
435 // Given a partition and a mutable fst, merge states of Fst inplace
442 const Partition<typename A::StateId>& partition, MutableFst<A>* fst) {
456 for (MutableArcIterator<MutableFst<A> > aiter(fst, s);
464 fst->AddArc(state_map[c], arc);
468 fst->SetStart(state_map[partition.class_id(fst->Start())]);
470 Connect(fst);
474 void AcceptorMinimize(MutableFst<A>* fst) {
476 if (!(fst->Properties(kAcceptor | kUnweighted, true)))
477 LOG(FATAL) << "Input Fst is not an unweighted acceptor";
479 // connect fst before minimization, handles disconnected states
480 Connect(fst);
481 if (fst->NumStates() == 0) return;
483 if (fst->Properties(kAcyclic, true)) {
486 AcyclicMinimizer<A> minimizer(*fst);
487 MergeStates(minimizer.partition(), fst);
492 CyclicMinimizer<A, LifoQueue<StateId> > minimizer(*fst);
493 MergeStates(minimizer.partition(), fst);
497 ArcSort(fst, ILabelCompare<A>());
500 ArcSum(fst);
514 void Minimize(MutableFst<A>* fst, MutableFst<A>* sfst = 0) {
515 uint64 props = fst->Properties(kAcceptor | kIDeterministic|
518 LOG(FATAL) << "Input Fst is not deterministic";
522 Map(*fst, &gfst, ToGallicMapper<A, STRING_LEFT>());
523 fst->DeleteStates();
537 Map(fwfst, fst, FromGallicMapper<A, STRING_LEFT>());
539 sfst->SetOutputSymbols(fst->OutputSymbols());
541 Map(gfst, fst, mapper);
542 fst->SetOutputSymbols(sfst->InputSymbols());
545 Push(fst, REWEIGHT_TO_INITIAL);
546 Map(fst, QuantizeMapper<A>());
548 Encode(fst, &encoder);
549 AcceptorMinimize(fst);
550 Decode(fst, encoder);
552 AcceptorMinimize(fst);
556 } // namespace fst