Package joshua.discriminative.feature_related.feature_template

Source Code of joshua.discriminative.feature_related.feature_template.NgramFT

package joshua.discriminative.feature_related.feature_template;

import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;

import joshua.corpus.vocab.SymbolTable;
import joshua.decoder.ff.lm.NgramExtractor;
import joshua.decoder.ff.tm.Rule;
import joshua.decoder.hypergraph.HGNode;
import joshua.decoder.hypergraph.HyperEdge;
import joshua.discriminative.DiscriminativeSupport;

public class NgramFT extends AbstractFeatureTemplate {
 
  private int startNgramOrder = 1;
  private int endNgramOrder = 3;
   
  private NgramExtractor ngramExtractor;
 
 
  public NgramFT(SymbolTable symbolTbl, boolean useIntegerNgram, int ngramStateID, int baselineLMOrder, int startOrder, int endOrder){
 
    this.startNgramOrder = startOrder;
    this.endNgramOrder = endOrder;
   
    if(baselineLMOrder<endNgramOrder){
      System.out.println("baseline lm order is smaller than end_lm_order");
      System.exit(0);
    }
   
    this.ngramExtractor = new NgramExtractor(symbolTbl, ngramStateID, useIntegerNgram, baselineLMOrder);
   
    System.out.println("startOrder=" + startOrder);
    System.out.println("endOrder=" + endOrder);
   
  }
 
 
  public void getFeatureCounts(HyperEdge dt,  HashMap<String, Double> featureTbl, HashSet<String> restrictedFeatureSet, double scale) {
    HashMap<String,Integer> ngramsTbl;
    if(dt.getRule()==null)
      ngramsTbl = ngramExtractor.getFinalTransitionNgrams(dt, startNgramOrder, endNgramOrder);
    else
      ngramsTbl = ngramExtractor.getTransitionNgrams(dt, startNgramOrder, endNgramOrder);
   
    if(ngramsTbl!=null){           
      for(Map.Entry<String,Integer> entry : ngramsTbl.entrySet()){
        String ngramFeatKey= entry.getKey();         
        if(restrictedFeatureSet ==null || restrictedFeatureSet.contains(ngramFeatKey)==true){       
            DiscriminativeSupport.increaseCount(featureTbl, ngramFeatKey,entry.getValue()*scale)
       
        }
      }
    } 
  }


  public void getFeatureCounts(Rule rule, List<HGNode> antNodes, HashMap<String, Double> featureTbl, HashSet<String> restrictedFeatureSet, double scale) {
    HashMap<String,Integer> ngramsTbl;
    if(rule==null)
      ngramsTbl = ngramExtractor.getFinalTransitionNgrams(antNodes.get(0), startNgramOrder, endNgramOrder);
    else
      ngramsTbl = ngramExtractor.getTransitionNgrams(rule, antNodes, startNgramOrder, endNgramOrder);
   
    if(ngramsTbl!=null){           
      for(Map.Entry<String,Integer> entry : ngramsTbl.entrySet()){
        String ngramFeatKey= entry.getKey();         
        if(restrictedFeatureSet ==null || restrictedFeatureSet.contains(ngramFeatKey)==true){       
            DiscriminativeSupport.increaseCount(featureTbl, ngramFeatKey,entry.getValue()*scale)
       
        }
      }
    }
   
  }


  public void estimateFeatureCounts(Rule rule, HashMap<String, Double> featureTbl, HashSet<String> restrictedFeatureSet, double scale) {
    HashMap<String,Integer> ngramsTbl = ngramExtractor.getRuleNgrams(rule, startNgramOrder, endNgramOrder);   
    if(ngramsTbl!=null){           
      for(Map.Entry<String,Integer> entry : ngramsTbl.entrySet()){
        String ngramFeatKey= entry.getKey();         
        if(restrictedFeatureSet ==null || restrictedFeatureSet.contains(ngramFeatKey)==true){       
            DiscriminativeSupport.increaseCount(featureTbl, ngramFeatKey,entry.getValue()*scale);       
        }
      }
    }   
  }

 
}
 
TOP

Related Classes of joshua.discriminative.feature_related.feature_template.NgramFT

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.