private static void ExportFst(Fst fst, string filename) { StreamWriter streamWriter = new StreamWriter(filename); // print start first State start = fst.Start; streamWriter.WriteLine(start.GetId() + "\t" + start.FinalWeight); // print all states int numStates = fst.GetNumStates(); for (int i = 0; i < numStates; i++) { State s = fst.GetState(i); if (s.GetId() != fst.Start.GetId()) { streamWriter.WriteLine(s.GetId() + "\t" + s.FinalWeight); } } string[] isyms = fst.Isyms; string[] osyms = fst.Osyms; numStates = fst.GetNumStates(); for (int i = 0; i < numStates; i++) { State s = fst.GetState(i); int numArcs = s.GetNumArcs(); for (int j = 0; j < numArcs; j++) { Arc arc = s.GetArc(j); string isym = (isyms != null) ? isyms[arc.Ilabel] : Integer.ToString(arc.Ilabel); string osym = (osyms != null) ? osyms[arc.Olabel] : Integer.ToString(arc.Olabel); streamWriter.WriteLine(s.GetId() + "\t" + arc.NextState.GetId() + "\t" + isym + "\t" + osym + "\t" + arc.Weight); } } streamWriter.Close(); }
/** * /// Deserializes an Fst from an ObjectInputStream * /// * /// @param in * /// the ObjectInputStream. It should be already be initialized by * /// the caller. * /// @return * /// @throws IOException * /// @throws ClassNotFoundException */ private static Fst ReadFst(Stream inStream) { var _is = ReadStringMap(inStream); var os = ReadStringMap(inStream); var serializer = new BinaryFormatter(); var startid = (int)serializer.Deserialize(inStream); var semiring = (Semiring)serializer.Deserialize(inStream); var numStates = (int)serializer.Deserialize(inStream); var res = new Fst(numStates); res.Isyms = _is; res.Osyms = os; res.Semiring = semiring; for (var i = 0; i < numStates; i++) { var numArcs = (int)serializer.Deserialize(inStream); var s = new State(numArcs + 1); var f = (float)serializer.Deserialize(inStream); if (f == res.Semiring.Zero) { f = res.Semiring.Zero; } else if (f == res.Semiring.One) { f = res.Semiring.One; } s.FinalWeight = f; s.Id = (int)serializer.Deserialize(inStream); res._states.Add(s); } res.SetStart(res._states[startid]); numStates = res.GetNumStates(); for (var i = 0; i < numStates; i++) { var s1 = res.GetState(i); for (var j = 0; j < s1.InitialNumArcs - 1; j++) { var a = new Arc(); a.Ilabel = (int)serializer.Deserialize(inStream); a.Olabel = (int)serializer.Deserialize(inStream); a.Weight = (float)serializer.Deserialize(inStream); a.NextState = res._states[(int)serializer.Deserialize(inStream)]; s1.AddArc(a); } } return(res); }