Example #1
0
        private Fst CreatePo()
        {
            var ts  = new TropicalSemiring();
            var fst = new Fst(ts);

            var s1 = new State(ts.Zero);
            var s2 = new State(ts.Zero);
            var s3 = new State(ts.Zero);
            var s4 = new State(2f);

            // State 0
            fst.AddState(s1);
            s1.AddArc(new Arc(5, 5, 1f, s2));
            s1.AddArc(new Arc(4, 4, 3f, s2));
            fst.SetStart(s1);

            // State 1
            fst.AddState(s2);
            s2.AddArc(new Arc(3, 3, 7f, s2));
            s2.AddArc(new Arc(2, 2, 5f, s3));

            // State 2
            fst.AddState(s3);
            s3.AddArc(new Arc(1, 1, 9f, s4));

            // State 3
            fst.AddState(s4);

            return(fst);
        }
Example #2
0
        private Fst entryToFSA(ArrayList arrayList)
        {
            TropicalSemiring tropicalSemiring = new TropicalSemiring();
            Fst   fst   = new Fst(tropicalSemiring);
            State state = new State(tropicalSemiring.zero());

            fst.addState(state);
            fst.setStart(state);
            for (int i = 0; i < arrayList.size() + 1; i++)
            {
                state = new State(tropicalSemiring.zero());
                fst.addState(state);
                if (i >= 1)
                {
                    int index = Utils.getIndex(this.g2pmodel.getIsyms(), (string)arrayList.get(i - 1));
                    fst.getState(i).addArc(new Arc(index, index, 0f, state));
                }
                else if (i == 0)
                {
                    int index = Utils.getIndex(this.g2pmodel.getIsyms(), this.sb);
                    fst.getStart().addArc(new Arc(index, index, 0f, state));
                }
                if (i == arrayList.size())
                {
                    State state2 = new State(tropicalSemiring.zero());
                    fst.addState(state2);
                    int num = Utils.getIndex(this.g2pmodel.getIsyms(), this.se);
                    state.addArc(new Arc(num, num, 0f, state2));
                    state2.setFinalWeight(0f);
                }
            }
            for (int i = 0; i < this.clusters.Length; i++)
            {
                ArrayList arrayList2 = this.clusters[i];
                if (arrayList2 != null)
                {
                    int num  = 0;
                    int num2 = 0;
                    while (num2 != -1)
                    {
                        num2 = Utils.search(arrayList, arrayList2, num);
                        if (num2 != -1)
                        {
                            State state3 = fst.getState(num + num2 + 1);
                            state3.addArc(new Arc(i, i, 0f, fst.getState(num + num2 + arrayList2.size() + 1)));
                            num = num + num2 + arrayList2.size();
                        }
                    }
                }
            }
            fst.setIsyms(this.g2pmodel.getIsyms());
            fst.setOsyms(this.g2pmodel.getIsyms());
            return(fst);
        }
Example #3
0
        /**
         * /// Transforms an input spelling/pronunciation into an equivalent FSA, adding
         * /// extra arcs as needed to accommodate clusters.
         * ///
         * /// @param entry
         * ///            the input vector
         * /// @return the created fst
         */
        private Fsts.Fst EntryToFsa(List <String> entry)
        {
            var ts   = new TropicalSemiring();
            var efst = new Fsts.Fst(ts);

            var s = new State(ts.Zero);

            efst.AddState(s);
            efst.SetStart(s);

            // Build the basic FSA
            for (var i = 0; i < entry.Count + 1; i++)
            {
                s = new State(ts.Zero);
                efst.AddState(s);
                if (i >= 1)
                {
                    var symIndex = Utils.GetIndex(_g2Pmodel.Isyms,
                                                  entry[i - 1]);
                    efst.GetState(i).AddArc(new Arc(symIndex, symIndex, 0.0f, s));
                }
                else if (i == 0)
                {
                    var symIndex = Utils.GetIndex(_g2Pmodel.Isyms, Sb);
                    efst.Start.AddArc(new Arc(symIndex, symIndex, 0.0f, s));
                }

                if (i == entry.Count)
                {
                    var s1 = new State(ts.Zero);
                    efst.AddState(s1);
                    var symIndex = Utils.GetIndex(_g2Pmodel.Isyms, Se);
                    s.AddArc(new Arc(symIndex, symIndex, 0.0f, s1));
                    s1.FinalWeight = 0.0f;
                }
            }

            // Add any cluster arcs
            for (var value = 0; value < _clusters.Count; value++)
            {
                var cluster = _clusters[value];
                if (cluster != null)
                {
                    var start = 0;
                    var k     = 0;
                    while (k != -1)
                    {
                        k = Utils.Search(entry, cluster, start);
                        if (k != -1)
                        {
                            var from = efst.GetState(start + k + 1);
                            from.AddArc(new Arc(value, value, 0.0f, efst
                                                .GetState(start + k + cluster.Count + 1)));
                            start = start + k + cluster.Count;
                        }
                    }
                }
            }

            efst.Isyms = _g2Pmodel.Isyms;
            efst.Osyms = _g2Pmodel.Isyms;

            return(efst);
        }