package joshua.discriminative.feature_related.feature_template; import java.util.HashMap; import java.util.HashSet; import java.util.List; import joshua.corpus.vocab.SymbolTable; import joshua.decoder.ff.tm.Rule; import joshua.decoder.hypergraph.HGNode; import joshua.discriminative.DiscriminativeSupport; public class TMFT extends AbstractFeatureTemplate { SymbolTable symbolTbl; boolean useIntegerString = true; /**we can use the ruleID * as feature name*/ boolean useRuleIDName = true; String prefix="r"; public TMFT(SymbolTable symbolTbl, boolean useIntegerString, boolean useRuleIDName){ this.symbolTbl = symbolTbl; this.useIntegerString = useIntegerString; this.useRuleIDName = useRuleIDName; System.out.println("TM template"); } public void getFeatureCounts(Rule rule, List<HGNode> antNodes, HashMap<String, Double> featureTbl, HashSet<String> restrictedFeatureSet, double scale) { computeCounts(rule, featureTbl, restrictedFeatureSet, scale); } public void estimateFeatureCounts(Rule rule, HashMap<String, Double> featureTbl, HashSet<String> restrictedFeatureSet, double scale) { computeCounts(rule, featureTbl, restrictedFeatureSet, scale); } private void computeCounts(Rule rule, HashMap<String, Double> featureTbl, HashSet<String> restrictedFeatureSet, double scale){ if(rule != null){ String key = null; if(this.useRuleIDName){ key = this.prefix + rule.getRuleID(); //System.out.println("key is " + key + "; And: " +rule.toStringWithoutFeatScores(symbolTbl));System.exit(0); }else{ if(this.useIntegerString)//TODO key = rule.toStringWithoutFeatScores(null); else key = rule.toStringWithoutFeatScores(symbolTbl); } if(restrictedFeatureSet == null || restrictedFeatureSet.contains(key)==true){ DiscriminativeSupport.increaseCount(featureTbl, key, scale); //System.out.println("key is " + key +"; lhs " + symbolTbl.getWord(rule.getLHS())); } } } }