Exemplo n.º 1
0
        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();
        }
Exemplo n.º 2
0
        /**
         * /// 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);
        }