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); }
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); }
/** * /// 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); }