package edu.cmu.sphinx.decoder.scorer; import edu.cmu.sphinx.decoder.search.SimpleBreadthFirstSearchManager; import edu.cmu.sphinx.decoder.search.Token; import edu.cmu.sphinx.util.props.PropertyException; import edu.cmu.sphinx.util.props.PropertySheet; import edu.cmu.sphinx.util.props.S4Component; import java.util.List; import java.util.logging.Logger; /** * Normalizes a set of Tokens against the best scoring Token of a background model. * * @author Holger Brandl */ public class BackgroundModelNormalizer implements ScoreNormalizer { /** * The active list provider used to determined the best token for normalization. If this reference is not defined no * normalization will be applied. */ @S4Component(type = SimpleBreadthFirstSearchManager.class, mandatory = false) public static final String ACTIVE_LIST_PROVIDER = "activeListProvider"; private SimpleBreadthFirstSearchManager activeListProvider; private Logger logger; public BackgroundModelNormalizer() { } public void newProperties(PropertySheet ps) throws PropertyException { this.activeListProvider = (SimpleBreadthFirstSearchManager) ps.getComponent(ACTIVE_LIST_PROVIDER); this.logger = ps.getLogger(); logger.warning("no active list set."); } /** * @param activeListProvider The active list provider used to determined the best token for normalization. If this reference is not defined no * normalization will be applied. */ public BackgroundModelNormalizer(SimpleBreadthFirstSearchManager activeListProvider) { this.activeListProvider = activeListProvider; this.logger = Logger.getLogger(getClass().getName()); logger.warning("no active list set."); } public Scoreable normalize(List<? extends Scoreable> scoreableList, Scoreable bestToken) { if (activeListProvider == null) { return bestToken; } Token normToken = activeListProvider.getActiveList().getBestToken(); float normScore = normToken.getScore(); for (Scoreable scoreable : scoreableList) { if (scoreable instanceof Token) { scoreable.normalizeScore(normScore); } } return bestToken; } }