/** * Creates the grammar from the language model. This Grammar contains one word per grammar node. * Each word (and grammar node) is connected to all other words with the given probability * * @return the initial grammar node */ @Override protected GrammarNode createGrammar() throws IOException { if (lattice == null) { return createGrammarNode("<s>"); } lattice.removeFillers(); GrammarNode firstNode = null; HashMap<Node, GrammarNode> nodeMap = new HashMap<Node, GrammarNode>(); for (Node n : lattice.getNodes()) { String word = n.getWord().toString(); GrammarNode node = createGrammarNode(word); if (n.equals(lattice.getInitialNode())) firstNode = node; if (n.equals(lattice.getTerminalNode())) node.setFinalNode(true); nodeMap.put(n, node); } if (firstNode == null) { throw new Error("No lattice start found"); } for (Edge e : lattice.getEdges()) { float logProbability = (float) e.getLMScore(); GrammarNode prevNode = nodeMap.get(e.getFromNode()); GrammarNode toNode = nodeMap.get(e.getToNode()); prevNode.add(toNode, logProbability); } return firstNode; }