/** Convert word graph to phoneme graph */
  private Graph buildPhonemeGraph(Graph wordGraph) {
    Graph phonemeGraph = new Graph();
    phonemeGraph.copyGraph(wordGraph);

    for (Node node : phonemeGraph.nodeToArray()) {
      if (node.getType().equals(NodeType.WORD)) {
        String word = node.getID();
        // "false" means graph won't have additional dummy
        // nodes surrounding the word
        Graph pronunciationGraph = dictionary.getWordGraph(word, false);
        phonemeGraph.insertGraph(pronunciationGraph, node);
      }
    }
    return phonemeGraph;
  }
  /**
   * Convert the phoneme graph to an HMM.
   *
   * @param cdGraph a context dependent phoneme graph
   * @return an HMM graph for a context dependent phoneme graph
   */
  public Graph buildHMMGraph(Graph cdGraph) {
    Graph hmmGraph = new Graph();

    hmmGraph.copyGraph(cdGraph);

    for (Node node : hmmGraph.nodeToArray()) {
      Unit unit = null;
      if (node.getType().equals(NodeType.PHONE)) {
        unit = unitManager.getUnit(node.getID());
      } else if (node.getType().equals(NodeType.SILENCE_WITH_LOOPBACK)) {
        unit = unitManager.getUnit("SIL");
      } else {
        // if it's not a phone, and it's not silence, it's a
        // dummy node, and we don't care.
        continue;
      }
      HMM hmm = acousticModel.lookupNearestHMM(unit, HMMPosition.UNDEFINED, false);
      Graph modelGraph = buildModelGraph((SenoneHMM) hmm);
      modelGraph.validate();
      hmmGraph.insertGraph(modelGraph, node);
    }
    return hmmGraph;
  }
 /**
  * Convert phoneme graph to a context sensitive phoneme graph. This graph expands paths out to
  * have separate phoneme nodes for phonemes in different contexts.
  *
  * @param phonemeGraph the phoneme graph
  * @return a context dependendent phoneme graph
  */
 public Graph buildContextDependentPhonemeGraph(Graph phonemeGraph) {
   // TODO: Dummy stub for now - return a copy of the original graph
   Graph cdGraph = new Graph();
   cdGraph.copyGraph(phonemeGraph);
   return cdGraph;
 }