/***********************************************************************
This file is part of KEEL-software, the Data Mining tool for regression,
classification, clustering, pattern mining and so on.
Copyright (C) 2004-2010
F. Herrera (herrera@decsai.ugr.es)
L. S�nchez (luciano@uniovi.es)
J. Alcal�-Fdez (jalcala@decsai.ugr.es)
S. Garc�a (sglopez@ujaen.es)
A. Fern�ndez (alberto.fernandez@ujaen.es)
J. Luengo (julianlm@decsai.ugr.es)
This program 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.
This program 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 this program. If not, see http://www.gnu.org/licenses/
**********************************************************************/
/**
* <p>
* @author Written by Crist�bal Romero Morales (University of Oviedo) 01/07/2008
* @author Modified by Xavi Sol� (La Salle, Ram�n Llull University - Barcelona) 03/12/2008
* @version 1.1
* @since JDK1.2
* </p>
*/
package keel.Algorithms.Rule_Learning.PART;
import java.io.BufferedWriter;
import java.io.StreamTokenizer;
import java.io.IOException;
import keel.Dataset.Attributes;
public abstract class Algorithm{
/** The name of the file that contains the information to build the model. */
protected static String modelFileName = "";
/** The name of the file that contains the information to make the training. */
protected static String trainFileName = "";
/** The name of the file that contains the information to make the test. */
protected static String testFileName = "";
/** The name of the train output file. */
protected static String trainOutputFileName;
/** The name of the test output file. */
protected static String testOutputFileName;
/** The name of the result file. */
protected static String resultFileName;
/** Correctly classified itemsets. */
protected int correct = 0;
/** Correctly classified in test. */
protected int testCorrect = 0;
/** The model dataset. */
protected MyDataset modelDataset;
/** The train dataset. */
protected MyDataset trainDataset;
/** The test dataset. */
protected MyDataset testDataset;
/** The log file. */
protected static BufferedWriter log;
/** The instant of starting the algorithm. */
protected long startTime = System.currentTimeMillis();
/** Function to initialize the stream tokenizer.
*
* @param tokenizer The tokenizer.
*/
protected void initTokenizer( StreamTokenizer tokenizer )
{
tokenizer.resetSyntax();
tokenizer.whitespaceChars( 0, ' ' );
tokenizer.wordChars( ' '+1,'\u00FF' );
tokenizer.whitespaceChars( ',',',' );
tokenizer.quoteChar( '"' );
tokenizer.quoteChar( '\'' );
tokenizer.ordinaryChar( '=' );
tokenizer.ordinaryChar( '{' );
tokenizer.ordinaryChar( '}' );
tokenizer.ordinaryChar( '[' );
tokenizer.ordinaryChar( ']' );
tokenizer.eolIsSignificant( true );
}
/** Function to get the name of the relation and the names, types and possible values of every attribute in
* a dataset.
*
* @return The name and the attributes of the relation.
*/
protected String getHeader()
{
String header;
header = "@relation "+Attributes.getRelationName()+"\n";
header += Attributes.getInputAttributesHeader();
header += Attributes.getOutputAttributesHeader();
header += Attributes.getInputHeader()+"\n";
header += Attributes.getOutputHeader()+"\n";
header += "@data\n";
return header;
}
/** Puts the tokenizer in the first token of the next line.
*
* @param tokenizer The tokenizer which reads this function.
*
* @return True if reaches the end of file. False otherwise.
*
* @throws Exception If cannot read the tokenizer.
*/
protected boolean getNextToken( StreamTokenizer tokenizer ) throws Exception
{
try
{
if ( tokenizer.nextToken() == StreamTokenizer.TT_EOF )
return false;
else
{
tokenizer.pushBack();
while ( tokenizer.nextToken() != StreamTokenizer.TT_EOL );
while ( tokenizer.nextToken() == StreamTokenizer.TT_EOL );
if ( tokenizer.sval == null )
return false;
else
return true;
}
}
catch( Exception e )
{
System.err.println( e.getMessage() );
return false;
}
}
/** Function to read the options from the execution file and assign the values to the parameters.
*
* @param options The StreamTokenizer that reads the parameters file.
*
* @throws Exception If the format of the file is not correct.
*/
protected abstract void setOptions( StreamTokenizer options ) throws Exception;
/** Evaluates the algorithm and writes the results in the file.
*
* @throws IOException If the file cannot be written.
*/
protected abstract void printResult() throws IOException;
/** Evaluates the test dataset and writes the results in the file.
*
* @throws IOException If the file cannot be written.
*/
protected abstract void printTest() throws IOException;
/** Evaluates the training dataset and writes the results in the file.
*
* @throws IOException If the file cannot be written.
*/
protected abstract void printTrain() throws IOException;
}