// Copyright 2015 Thomas Müller
// This file is part of MarMoT, which is licensed under GPLv3.
package lemming.lemma.toutanova;
import java.io.Serializable;
import marmot.core.Feature;
import marmot.util.DynamicWeights;
import marmot.util.Encoder;
import marmot.util.SymbolTable;
public abstract class IndexConsumer implements Serializable {
private static final long serialVersionUID = 1L;
private SymbolTable<Feature> feature_map_;
private int num_pos_bits_;
protected DynamicWeights weights_;
public abstract void consume(int index);
public IndexConsumer(DynamicWeights weights, SymbolTable<Feature> feature_map, int num_pos_bits) {
setWeights(weights);
feature_map_ = feature_map;
num_pos_bits_ = num_pos_bits;
}
public void consume(ToutanovaInstance instance, Encoder encoder) {
int index = feature_map_.toIndex(encoder.getFeature(), -1, getInsert());
consume(index);
if (num_pos_bits_ >= 0 && instance.getPosTagIndex() >= 0) {
encoder.storeState();
encoder.append(instance.getPosTagIndex(), num_pos_bits_);
index = feature_map_.toIndex(encoder.getFeature(), -1, getInsert());
consume(index);
encoder.restoreState();
}
}
protected abstract boolean getInsert();
public void setWeights(DynamicWeights weights) {
weights_ = weights;
}
}