package edu.berkeley.nlp.lm.phrasetable; import edu.berkeley.nlp.lm.ConfigOptions; import edu.berkeley.nlp.lm.WordIndexer; import edu.berkeley.nlp.lm.io.LmReaderCallback; import edu.berkeley.nlp.lm.map.HashNgramMap; /** * Class for representing phrase tables efficiently in memory. * * @author adampauls * * @param <W> */ public class MosesPhraseTableReaderCallback<W> implements LmReaderCallback<PhraseTableCounts> { private final HashNgramMap<PhraseTableValueContainer.PhraseTableValues> phrases; public MosesPhraseTableReaderCallback(final WordIndexer<W> wordIndexer) { final PhraseTableValueContainer values = new PhraseTableValueContainer(wordIndexer.getOrAddIndexFromString(MosesPhraseTableReader.SEP_WORD), 5); phrases = HashNgramMap.createExplicitWordHashNgramMap(values, new ConfigOptions(), 20, false); } @Override public void call(final int[] ngram, final int startPos, final int endPos, final PhraseTableCounts value, final String words) { for (int ngramOrder = 0; ngramOrder < endPos - startPos; ++ngramOrder) phrases.put(ngram, startPos, startPos + ngramOrder + 1, new PhraseTableValueContainer.TargetTranslationsValues()); phrases.put(ngram, startPos, endPos, new PhraseTableValueContainer.FeaturePhraseTableValues(value.features)); } @Override public void cleanup() { phrases.trim(); } public HashNgramMap<PhraseTableValueContainer.PhraseTableValues> getMap() { return phrases; } }