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.BilingualRule; import joshua.decoder.ff.tm.Rule; import joshua.decoder.hypergraph.HGNode; import joshua.discriminative.DiscriminativeSupport; public class TargetTMFT extends AbstractFeatureTemplate { SymbolTable symbolTbl; boolean useIntegerString = true; public TargetTMFT(SymbolTable symbolTbl, boolean useIntegerString){ this.symbolTbl = symbolTbl; this.useIntegerString = useIntegerString; System.out.println("TargetTMFT 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 String ruleEnglishString(BilingualRule rule, SymbolTable symbolTable) { if(useIntegerString){ return rule.convertToString(rule.getEnglish(), null); }else{ return rule.convertToString(rule.getEnglish(), symbolTable); } } private void computeCounts(Rule rule, HashMap<String, Double> featureTbl, HashSet<String> restrictedFeatureSet, double scale){ if(rule!=null){ String featName= ruleEnglishString( (BilingualRule) rule, this.symbolTbl);//TODO if( restrictedFeatureSet==null || ( restrictedFeatureSet!=null && restrictedFeatureSet.contains(featName) ) ){ DiscriminativeSupport.increaseCount(featureTbl, featName, scale); } } } }