/*
* This file is part of ALOE.
*
* ALOE is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* ALOE is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with ALOE. If not, see <http://www.gnu.org/licenses/>.
*
* Copyright (c) 2012 SCCL, University of Washington (http://depts.washington.edu/sccl)
*/
package etc.aloe.cscw2013;
import etc.aloe.data.ExampleSet;
import etc.aloe.data.FeatureSpecification;
import etc.aloe.processes.FeatureExtraction;
import etc.aloe.processes.Loggable.Verbosity;
import weka.core.Instances;
import weka.filters.Filter;
/**
* Applies an existing feature specification to a data set to get a new data set
* with features extracted.
*
* @author Michael Brooks <mjbrooks@uw.edu>
*/
public class FeatureExtractionImpl implements FeatureExtraction {
private Verbosity verbosity = Verbosity.Normal;
@Override
public ExampleSet extractFeatures(ExampleSet basicExamples, FeatureSpecification spec) {
ExampleSet examples = basicExamples;
if (this.verbosity.ordinal() > Verbosity.Quiet.ordinal()) {
System.out.print("Extracting features for " + examples.size() + " examples... ");
}
for (Filter filter : spec.getFilters()) {
try {
Instances instances = Filter.useFilter(examples.getInstances(), filter);
examples = new ExampleSet(instances);
} catch (Exception e) {
System.err.println("Unable to apply filter: " + filter.toString());
System.err.println("\t" + e.getMessage());
return null;
}
}
if (this.verbosity.ordinal() > Verbosity.Quiet.ordinal()) {
System.out.println("done.");
}
return examples;
}
@Override
public void setVerbosity(Verbosity verbosityLevel) {
this.verbosity = verbosityLevel;
}
}