protected internal virtual HMMStateState expandHMMTree(UnitState parent, HMMStateState tree) { HMMStateState result = tree; HMMStateArc[] successors = tree.getHMMState().getSuccessors(); int num = successors.Length; for (int i = 0; i < num; i++) { HMMStateArc hmmstateArc = successors[i]; HMMStateState hmmstateState; if (hmmstateArc.getHMMState().isEmitting()) { hmmstateState = new HMMStateState(parent, hmmstateArc.getHMMState()); } else { hmmstateState = new NonEmittingHMMState(parent, hmmstateArc.getHMMState()); } SentenceHMMState existingState = this.getExistingState(hmmstateState); float logProbability = hmmstateArc.getLogProbability(); if (existingState != null) { this.attachState(tree, existingState, 0f, logProbability); } else { this.attachState(tree, hmmstateState, 0f, logProbability); this.addStateToCache(hmmstateState); result = this.expandHMMTree(parent, hmmstateState); } } return(result); }
public virtual HMMStateArc[] getSuccessors() { if (this.arcs == null) { ArrayList arrayList = new ArrayList(); float[][] transitionMatrix = this.hmm.getTransitionMatrix(); for (int i = 0; i < transitionMatrix.Length; i++) { if (transitionMatrix[this.state][i] > -3.40282347E+38f) { HMMStateArc hmmstateArc = new HMMStateArc(this.hmm.getState(i), transitionMatrix[this.state][i]); arrayList.add(hmmstateArc); } } this.arcs = (HMMStateArc[])arrayList.toArray(new HMMStateArc[arrayList.size()]); } return(this.arcs); }