package joshua.discriminative.feature_related.feature_template;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.logging.Logger;
import joshua.decoder.ff.tm.Rule;
import joshua.decoder.hypergraph.HGNode;
import joshua.decoder.hypergraph.HyperEdge;
import joshua.discriminative.DiscriminativeSupport;
/* This return the baseline transitionLogP of the hyperedge (not the accumlative LogP)
* */
/*while the LogP of the baseline feature will not change,
* the weight of the baseline feature may change*/
public class BaselineFT extends AbstractFeatureTemplate {
private String baselineFeatName = null;
private boolean isFixBaselineLogP=true;
private static Logger logger = Logger.getLogger(BaselineFT.class.getName());
public BaselineFT(String baselineFeatName, boolean isFixBaselineLogP){
this.baselineFeatName = baselineFeatName;
this.isFixBaselineLogP = isFixBaselineLogP;
}
public void getFeatureCounts(HyperEdge dt, HashMap<String, Double> featureTbl, HashSet<String> restrictedFeatureSet, double scale) {
if(restrictedFeatureSet == null || restrictedFeatureSet.contains(baselineFeatName)==true){
double val = dt.getTransitionLogP( ! isFixBaselineLogP);
//System.out.println("baseline is " + val + " ; scale = " + scale);
DiscriminativeSupport.increaseCount(featureTbl, baselineFeatName, val*scale);
}
}
public void getFeatureCounts(Rule rule, List<HGNode> antNodes, HashMap<String, Double> featureTbl, HashSet<String> restrictedFeatureSet, double scale) {
logger.severe("unimplement function");
System.exit(0);
}
public void estimateFeatureCounts(Rule rule, HashMap<String, Double> featureTbl, HashSet<String> restrictedFeatureSet, double scale) {
logger.severe("unimplement function");
System.exit(0);
}
}