package edu.stanford.nlp.semparse.open.model.feature;
import java.util.*;
import edu.stanford.nlp.semparse.open.model.FeatureVector;
import edu.stanford.nlp.semparse.open.model.candidate.Candidate;
import edu.stanford.nlp.semparse.open.model.candidate.CandidateGroup;
/**
* A FeatureExtractor populate candidate's features.
* It calls the extract method of different FeatureTypes.
*/
public class FeatureExtractor {
protected final List<FeatureType> featureTypes = Arrays.asList(
new FeatureTypeNaiveEntityBased(),
new FeatureTypeNodeBased(),
new FeatureTypePathBased(),
new FeatureTypeLinguisticsBased(),
//new FeatureTypeQueryBased(),
new FeatureTypeHoleBased()
//new FeatureTypeCutRange()
);
protected final List<FeaturePostProcessor> featurePostProcessors = Arrays.asList(
(FeaturePostProcessor) new FeaturePostProcessorConjoin());
public void extract(Candidate candidate) {
if (candidate.features != null) return;
candidate.features = new FeatureVector();
for (FeatureType featureType : featureTypes) {
featureType.extract(candidate);
}
for (FeaturePostProcessor featurePostProcessor : featurePostProcessors) {
featurePostProcessor.process(candidate);
}
}
public void extract(CandidateGroup group) {
if (group.features != null) return;
group.features = new FeatureVector();
group.features.add("basic", "bias");
for (FeatureType featureType : featureTypes) {
featureType.extract(group);
}
for (FeaturePostProcessor featurePostProcessor : featurePostProcessors) {
featurePostProcessor.process(group);
}
}
public static final FeatureExtractor featureExtractor = new FeatureExtractor();
}