This operation removes epsilon-transitions (when both the input and output label are an epsilon) from a transducer. The result will be an equivalent FST that has no such epsilon transitions.
template <class Arc>
void RmEpsilon(MutableFst<Arc> *fst);template <class Arc> RmEpsilonFst<Arc>::
RmEpsilonFst(const Fst<Arc>& fst);fstrmepsilon [--opts] a.fst out.fst
--connect: Trim output (def: true)(TropicalWeight)
RmEpsilon(&A);
RmEpsilonFst<Arc>(A);
fstrmepsilon a.fst out.fstRmEpsilon:
-
TIme:
-
Unweighted:
$O(V^2 + V E)$ -
Acyclic:
$O(V^2 + V E)$ -
Tropical semiring:
$O(V^2 \log V + V E)$ -
General: exponential
-
Space:
$O(V E)$
where
RmEpsilonFst:
-
TIme:
-
Unweighted:
$O(v^2 + v e)$ -
General: exponential
-
Space:
$O(v e)$
where
See here for a discussion on efficient usage.
- Mehryar Mohri. Generic Epsilon-Removal and Input Epsilon-Normalization Algorithms for Weighted Transducers, International Journal of Computer Science, 13(1):129-143 (2002).

