Function rustfst::utils::transducer

source ·
pub fn transducer<W: Semiring, F: MutableFst<W>>(
    labels_input: &[Label],
    labels_output: &[Label],
    weight: W
) -> F
Expand description

Turns a list of input labels and output labels into a linear FST. The only accepted path in the FST has for input labels_input and for output labels_output.

§Example

let labels_input = vec![32, 43, 21];
let labels_output = vec![53, 18, 89];

let fst : VectorFst<ProbabilityWeight> = transducer(&labels_input, &labels_output, ProbabilityWeight::one());

assert_eq!(fst.num_states(), 4);

// The transducer function produces the same FST as the following code

let mut fst_ref = VectorFst::new();
let s1 = fst_ref.add_state();
let s2 = fst_ref.add_state();
let s3 = fst_ref.add_state();
let s4 = fst_ref.add_state();

fst_ref.set_start(s1).unwrap();
fst_ref.set_final(s4, ProbabilityWeight::one()).unwrap();

fst_ref.add_tr(s1, Tr::new(labels_input[0], labels_output[0], ProbabilityWeight::one(), s2)).unwrap();
fst_ref.add_tr(s2, Tr::new(labels_input[1], labels_output[1], ProbabilityWeight::one(), s3)).unwrap();
fst_ref.add_tr(s3, Tr::new(labels_input[2], labels_output[2], ProbabilityWeight::one(), s4)).unwrap();

assert_eq!(fst, fst_ref);