/*******************************************************************************
* Copyright 2013
* Ubiquitous Knowledge Processing (UKP) Lab
* Technische Universität Darmstadt
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
package de.tudarmstadt.ukp.csniper.webapp.statistics.page.export;
import java.io.File;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.exception.ExceptionUtils;
import com.google.common.io.Files;
import de.tudarmstadt.ukp.csniper.webapp.evaluation.EvaluationRepository;
import de.tudarmstadt.ukp.csniper.webapp.evaluation.MlPipeline;
import de.tudarmstadt.ukp.csniper.webapp.evaluation.model.EvaluationResult;
import de.tudarmstadt.ukp.csniper.webapp.project.model.AnnotationType;
import de.tudarmstadt.ukp.csniper.webapp.statistics.model.AggregatedEvaluationResult;
import de.tudarmstadt.ukp.csniper.webapp.statistics.page.StatisticsPage.ExportModel;
import de.tudarmstadt.ukp.csniper.webapp.statistics.page.StatisticsPage.StatisticsFormModel;
import de.tudarmstadt.ukp.csniper.webapp.support.task.Task;
public class ExportTkSvmTask
extends Task implements ExportTask
{
EvaluationRepository repository;
private StatisticsFormModel formModel;
private ExportModel exportModel;
private String language;
private File outputFile;
public ExportTkSvmTask(StatisticsFormModel aFormModel, ExportModel aExportModel,
EvaluationRepository aRepository, String aLanguage)
{
formModel = aFormModel;
exportModel = aExportModel;
repository = aRepository;
language = aLanguage;
}
@Override
public File getOutputFile()
{
return new File(outputFile, "training-data.svmlight");
}
@Override
public void clean()
{
if (outputFile != null) {
FileUtils.deleteQuietly(outputFile);
outputFile = null;
}
}
@Override
public String getFilename()
{
String innerSeparator = "-";
String outerSeparator = "_";
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
StringBuilder sb = new StringBuilder();
sb.append("csniper");
sb.append(outerSeparator);
sb.append(dateFormat.format(new Date()));
sb.append(outerSeparator);
sb.append(StringUtils.join(formModel.getCollections(), innerSeparator));
sb.append(outerSeparator);
for (Iterator<AnnotationType> it = formModel.getTypes().iterator(); it.hasNext();) {
sb.append(it.next().getName());
if (it.hasNext()) {
sb.append(innerSeparator);
}
}
sb.append(outerSeparator);
sb.append(StringUtils.join(formModel.getUsers(), innerSeparator));
sb.append(".svmlight");
return sb.toString();
}
@Override
protected void run()
{
outputFile = null;
try {
outputFile = Files.createTempDir();
List<AggregatedEvaluationResult> aggResults = repository.listAggregatedResults(
formModel.getCollections(), formModel.getTypes(), formModel.getUsers(),
formModel.getUserThreshold(), formModel.getConfidenceThreshold());
List<EvaluationResult> results = MlPipeline.convertToSimple(aggResults);
setTotal(results.size());
MlPipeline mlp = new MlPipeline(language);
mlp.setTask(this);
mlp.setRepostitory(repository);
mlp.createTrainingData(outputFile, results);
}
catch (Exception e) {
e.printStackTrace();
error("Export failed: " + ExceptionUtils.getRootCauseMessage(e));
cancel();
}
finally {
if (isCancelled()) {
clean();
}
}
}
}