/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.uff.ic.oceano.ostra.tools.datamining;
import br.uff.ic.oceano.util.Logger;
import br.uff.ic.oceano.ostra.controle.DataMiningControl;
import br.uff.ic.oceano.ostra.exception.DataMiningException;
import br.uff.ic.oceano.ostra.model.DataMiningResult;
import java.io.IOException;
import java.io.StringReader;
import java.util.Date;
import weka.core.Instances;
/**
*
* @author Dancastellani
*/
public class AprioriTool implements DataMiningTool {
private MyApriori apriori;
private static boolean executando = false;
private static final String NAME = "Apriori";
private static final String RATIONALE = "Apriori is a data mining method that mines Association Rules.";
public String getRegras() {
if (apriori == null) {
return "You must mine before get the rules";
}
return apriori.toString();
}
public DataMiningResult mine(String arffContent, DataMiningControl dataMiningControl) throws DataMiningException {
try {
if (executando) {
return null;
}
executando = true;
apriori = new MyApriori(dataMiningControl);
DataMiningResult dmr = new DataMiningResult();
dmr.setMinedInTime(new Date());
dmr.setUsedAlgorithmName(NAME);
dmr.setUsedAlgorithmDescription(RATIONALE);
dmr.setRuleMetricName(dataMiningControl.getReadableMetricType());
dmr.setMinConfidence(dataMiningControl.getMinMetric());
dmr.setMinSupport(dataMiningControl.getMinSup());
if (arffContent == null) {
dmr.setResultData("Não foram minerados padrões.");
dmr.setArff("Não houve arff de entrada. A base deve estar vazia.");
return dmr;
}
StringReader arffReader = new StringReader(arffContent);
final Instances transacoes = new Instances(arffReader);
apriori.buildAssociations(transacoes);
dmr.setNumberOfInstances(transacoes.numInstances());
dmr.setArff(arffContent);
dmr.setResultData(getRegras());
Logger.info("Generation pattern association rules from weka output.");
dmr.setDataMiningPatterns(apriori.getAssociationRules());
Logger.info("Patterns generated.");
return dmr;
} catch (IOException ex) {
Logger.error(ex.getMessage());
throw new DataMiningException(ex);
} catch (Exception ex) {
Logger.error(ex.getMessage());
throw new DataMiningException(ex);
} finally {
executando = false;
}
}
public String getName() {
return NAME;
}
public String getRationale() {
return RATIONALE;
}
}