package com.datascience.utils.transformations.simple;
import com.datascience.core.base.CategoryPair;
import com.datascience.core.results.ResultsFactory;
import com.datascience.core.results.WorkerResult;
import com.datascience.core.stats.MultinomialConfusionMatrix;
import com.datascience.utils.ITransformation;
import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
import java.util.LinkedList;
import java.util.Map;
/**
* @Author: artur
*/
public class WorkerResultTransform implements ITransformation<WorkerResult, String> {
protected Joiner joiner;
protected Splitter splitter;
protected ResultsFactory.WorkerResultNominalFactory resultFactory;
public WorkerResultTransform(ResultsFactory.WorkerResultNominalFactory wrnf){
joiner = Joiner.on(";");
splitter = Splitter.on(";");
resultFactory = wrnf;
}
/*
c1,c2,0.1;c1,c1,0.9;c2,c1,0.1;c2,c2,0.9|c1:2.0;c2:3.0
*/
@Override
public String transform(WorkerResult result) {
MultinomialConfusionMatrix cm = (MultinomialConfusionMatrix) result.getConfusionMatrix();
LinkedList<String> stringItems = new LinkedList<String>();
for (Map.Entry<CategoryPair, Double> item : cm.getMatrix().entrySet()){
stringItems.add(item.getKey().from + "," + item.getKey().to + "," + item.getValue());
}
return joiner.join(stringItems);
}
@Override
public WorkerResult inverse(String object) {
WorkerResult ret = resultFactory.create();
MultinomialConfusionMatrix cm = (MultinomialConfusionMatrix) ret.getConfusionMatrix();
cm.empty();
for (String item : splitter.split(object)){
String[] matrixVal = item.split(",");
cm.addError(matrixVal[0], matrixVal[1], Double.parseDouble(matrixVal[2]));
}
return ret;
}
}