/*
* Copyright 1999-2004 Carnegie Mellon University.
* Portions Copyright 2004 Sun Microsystems, Inc.
* Portions Copyright 2004 Mitsubishi Electric Research Laboratories.
* All Rights Reserved. Use is subject to license terms.
*
* See the file "license.terms" for information on usage and
* redistribution of this file, and for a DISCLAIMER OF ALL
* WARRANTIES.
*
*/
package edu.cmu.sphinx.linguist.language.grammar;
import static java.util.Arrays.asList;
import java.util.ArrayList;
import java.util.List;
import edu.cmu.sphinx.linguist.dictionary.Dictionary;
import edu.cmu.sphinx.util.LogMath;
public class AlignerGrammar extends Grammar {
protected GrammarNode finalNode;
private final List<String> tokens = new ArrayList<String>();
public AlignerGrammar(final boolean showGrammar, final boolean optimizeGrammar, final boolean addSilenceWords,
final boolean addFillerWords, final Dictionary dictionary) {
super(showGrammar, optimizeGrammar, addSilenceWords, addFillerWords, dictionary);
}
public AlignerGrammar() {
}
/*
* Reads Text and converts it into a list of tokens
*/
public void setText(String text) {
setWords(asList(text.split(" ")));
}
public void setWords(Iterable<String> words) {
tokens.clear();
for (String word : words) {
if (!word.isEmpty()) {
tokens.add(word);
}
}
createGrammar();
postProcessGrammar();
}
@Override
protected GrammarNode createGrammar() {
logger.info("Making Grammar");
initialNode = createGrammarNode(Dictionary.SILENCE_SPELLING);
finalNode = createGrammarNode(true);
GrammarNode prevNode = initialNode;
for (final String word : tokens) {
final GrammarNode wordNode = createGrammarNode(word);
final GrammarNode alternativeNode = createGrammarNode(false);
final GrammarNode exitNode = createGrammarNode(false);
prevNode.add(wordNode, LogMath.LOG_ONE);
prevNode.add(alternativeNode, LogMath.LOG_ONE);
wordNode.add(exitNode, LogMath.LOG_ONE);
alternativeNode.add(exitNode, LogMath.LOG_ONE);
prevNode = exitNode;
}
prevNode.add(finalNode, LogMath.LOG_ONE);
logger.info("Done making Grammar");
return initialNode;
}
}