public HMMNode[] getHMMNodes(EndNode endNode) { HMMNode[] array = (HMMNode[])this.endNodeMap.get(endNode.getKey()); if (array == null) { HashMap hashMap = new HashMap(); Unit baseUnit = endNode.getBaseUnit(); Unit leftContext = endNode.getLeftContext(); Iterator iterator = this.entryPoints.iterator(); while (iterator.hasNext()) { Unit unit = (Unit)iterator.next(); HMM hmm = this.hmmPool.getHMM(baseUnit, leftContext, unit, HMMPosition.__END); HMMNode hmmnode = (HMMNode)hashMap.get(hmm); if (hmmnode == null) { hmmnode = new HMMNode(hmm, 0f); hashMap.put(hmm, hmmnode); } hmmnode.addRC(unit); Node[] successors = endNode.getSuccessors(); int num = successors.Length; for (int i = 0; i < num; i++) { Node node = successors[i]; WordNode wordNode = (WordNode)node; hmmnode.addSuccessor(wordNode); } } array = (HMMNode[])hashMap.values().toArray(new HMMNode[hashMap.size()]); this.endNodeMap.put(endNode.getKey(), array); } return(array); }
internal virtual EndNode addSuccessor(EndNode endNode, float num) { Unit baseUnit = endNode.getBaseUnit(); EndNode endNode2 = (EndNode)this.getSuccessor(baseUnit); if (endNode2 == null) { this.putSuccessor(baseUnit, endNode); } else { if (endNode2.getUnigramProbability() < num) { endNode2.setUnigramProbability(num); } endNode = endNode2; } return(endNode); }