/***********************************************************************
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/
**********************************************************************/
/*
* ParserParameters.java
*
*/
/**
*
*/
package keel.Algorithms.Genetic_Rule_Learning.MPLCS.Assistant.Discretizers.Basic;
import java.util.*;
import java.io.*;
import keel.Algorithms.Genetic_Rule_Learning.MPLCS.Assistant.Globals.*;
public class ParserParameters {
static BufferedReader br;
/** Creates a new instance of ParserParameters */
public static void doParse(String fileName) {
try {
br=new BufferedReader(new FileReader(fileName));
} catch(Exception e) {
e.printStackTrace();
System.exit(1);
}
parseParameters();
System.out.println ("Parameters parsed");
}
/**
* Parses the header of the ARFF file
*/
static void parseParameters() {
String str=getLine();
while(str!= null) {
System.out.println ("Line: "+str);
StringTokenizer st = new StringTokenizer(str,"=");
String name = st.nextToken();
name=name.trim();
if(name.equalsIgnoreCase("algorithm"))
processAlgorithmName(st);
else if(name.equalsIgnoreCase("inputData"))
processInputs(st);
else if(name.equalsIgnoreCase("outputData"))
processOutputs(st);
else processParameters(st,name);
str=getLine();
}
}
static void processAlgorithmName(StringTokenizer st) {
if(!st.hasMoreTokens()) {
System.err.println("Parse error processing algorithm name");
System.exit(1);
}
String name=st.nextToken();
name=name.trim();
System.out.println ("The name is: "+name);
if(!validateAlgorithmName(name)) {
System.err.println("This config file is not for us : "
+name);
System.exit(1);
}
Parameters.algorithmName = new String(name);
System.out.println ("Returning from processAlgorithmName");
}
static void processInputs(StringTokenizer st) {
if(!st.hasMoreTokens()) {
System.err.println("Parse error processing inputs");
System.exit(1);
}
String files=st.nextToken();
files=files.trim();
if(!(files.startsWith("\"") && files.endsWith("\""))) {
System.err.println("Parse error processing inputs "+files);
System.exit(1);
}
files.replaceAll("^\"",""); files.replaceAll("\"$","");
StringTokenizer st2 = new StringTokenizer(files,"\"");
try {
String file1=st2.nextToken();
String sep=st2.nextToken();
String file2=st2.nextToken();
insertStringParameter("trainInputFile",file1);
insertStringParameter("testInputFile",file2);
} catch(NoSuchElementException e) {
System.err.println("Parse error processing inputs "+files);
System.exit(1);
}
}
static void processOutputs(StringTokenizer st) {
if(!st.hasMoreTokens()) {
System.err.println("Parse error processing outputs");
System.exit(1);
}
String files=st.nextToken();
files=files.trim();
if(!(files.startsWith("\"") && files.endsWith("\""))) {
System.err.println("Parse error processing outputs "+files);
System.exit(1);
}
files.replaceAll("^\"",""); files.replaceAll("\"$","");
StringTokenizer st2 = new StringTokenizer(files,"\"");
try {
String file1=st2.nextToken();
String sep=st2.nextToken();
String file2=st2.nextToken();
sep=st2.nextToken();
String file3=st2.nextToken();
insertStringParameter("trainOutputFile",file1);
insertStringParameter("testOutputFile",file2);
insertStringParameter("logOutputFile",file3);
} catch(NoSuchElementException e) {
System.err.println("Parse error processing outputs "+files);
System.exit(1);
}
}
static void processParameters(StringTokenizer st,String paramName) {
if(!st.hasMoreTokens()) {
System.err.println("Parse error processing parameter "+paramName);
System.exit(1);
}
String paramValue=st.nextToken();
paramValue=paramValue.trim();
System.out.println ("paramName: "+paramName);
if(isReal(paramName))
insertRealParameter(paramName,paramValue);
else if(isInteger(paramName))
insertIntegerParameter(paramName,paramValue);
else if(isBoolean(paramName))
insertBooleanParameter(paramName,paramValue);
else if(isString(paramName))
insertStringParameter(paramName,paramValue);
else {
System.err.println("Unknown parameter "+paramName);
System.exit(1);
}
}
static boolean isReal(String paramName) {
if(Parameters.algorithmName.equalsIgnoreCase("ChiMergeDiscretizer") && paramName.equalsIgnoreCase("confidenceThreshold")) return true;
if(Parameters.algorithmName.equalsIgnoreCase("Chi-Merge Discretizer") && paramName.equalsIgnoreCase("confidenceThreshold")) return true;
if(Parameters.algorithmName.equalsIgnoreCase("CADD") && paramName.equalsIgnoreCase("confidenceThreshold")) return true;
if(Parameters.algorithmName.equalsIgnoreCase("Class-Atribute Dependent Discretizer") && paramName.equalsIgnoreCase("confidenceThreshold")) return true;
return false;
}
static boolean isInteger(String paramName) {
if(Parameters.algorithmName.equalsIgnoreCase("UniformWidthDiscretizer") && paramName.equalsIgnoreCase("numIntervals")) return true;
if(Parameters.algorithmName.equalsIgnoreCase("Uniform Width Discretizer") && paramName.equalsIgnoreCase("numIntervals")) return true;
if(Parameters.algorithmName.equalsIgnoreCase("UniformFrequencyDiscretizer") && paramName.equalsIgnoreCase("numIntervals")) return true;
if(Parameters.algorithmName.equalsIgnoreCase("Uniform Frequency Discretizer") && paramName.equalsIgnoreCase("numIntervals")) return true;
if(Parameters.algorithmName.equalsIgnoreCase("RandomDiscretizer") && paramName.equalsIgnoreCase("seed")) return true;
if(Parameters.algorithmName.equalsIgnoreCase("Random Discretizer") && paramName.equalsIgnoreCase("seed")) return true;
if(Parameters.algorithmName.equalsIgnoreCase("RandomDiscretizer") && paramName.equalsIgnoreCase("seed")) return true;
if(Parameters.algorithmName.equalsIgnoreCase("Random Discretizer") && paramName.equalsIgnoreCase("seed")) return true;
if(Parameters.algorithmName.equalsIgnoreCase("CADD") && paramName.equalsIgnoreCase("seed")) return true;
if(Parameters.algorithmName.equalsIgnoreCase("Class-Atribute Dependent Discretizer") && paramName.equalsIgnoreCase("seed")) return true;
if(Parameters.algorithmName.equalsIgnoreCase("UniformFrequencyDiscretizer") && paramName.equalsIgnoreCase("seed")) return true;
if(Parameters.algorithmName.equalsIgnoreCase("Uniform Frequency Discretizer") && paramName.equalsIgnoreCase("seed")) return true;
if(Parameters.algorithmName.equalsIgnoreCase("CADD") && paramName.equalsIgnoreCase("numIntervals")) return true;
if(Parameters.algorithmName.equalsIgnoreCase("Class-Atribute Dependent Discretizer") && paramName.equalsIgnoreCase("numIntervals")) return true;
return false;
}
static boolean isBoolean(String paramName) {
return false;
}
static boolean isString(String paramName) {
return false;
}
static void insertRealParameter(String paramName,String paramValue) {
double num=Double.parseDouble(paramValue);
try {
Parameters param=new Parameters();
java.lang.reflect.Field f= Parameters.class.getField(paramName);
f.setDouble(param,num);
} catch(Exception e) {
System.err.println("Cannot set param "+paramName);
System.exit(1);
}
}
static void insertIntegerParameter(String paramName,String paramValue) {
int num=Integer.parseInt(paramValue);
try {
Parameters param=new Parameters();
java.lang.reflect.Field f= Parameters.class.getField(paramName);
f.setInt(param,num);
} catch(Exception e) {
System.err.println("Cannot set param "+paramName);
System.exit(1);
}
}
static void insertBooleanParameter(String paramName,String paramValue) {
boolean val=false;
if(paramValue.equals("true")) val=true;
try {
Parameters param=new Parameters();
java.lang.reflect.Field f= Parameters.class.getField(paramName);
f.setBoolean(param,val);
} catch(Exception e) {
System.err.println("Cannot set param "+paramName);
System.exit(1);
}
}
static void insertStringParameter(String paramName,String paramValue) {
try {
Parameters param=new Parameters();
java.lang.reflect.Field f= Parameters.class.getField(paramName);
f.set(param,new String(paramValue));
} catch(Exception e) {
System.err.println("Cannot set param "+paramName);
System.exit(1);
}
}
static boolean validateAlgorithmName(String name) {
if(name.equalsIgnoreCase("ChiMergeDiscretizer") ||
name.equalsIgnoreCase("Chi-Merge Discretizer")) return true;
if(name.equalsIgnoreCase("FayyadDiscretizer") ||
name.equalsIgnoreCase("Fayyad Discretizer")) return true;
if(name.equalsIgnoreCase("Id3Discretizer") ||
name.equalsIgnoreCase("ID3 Discretizer")) return true;
if(name.equalsIgnoreCase("RandomDiscretizer") ||
name.equalsIgnoreCase("Random Discretizer")) return true;
if(name.equalsIgnoreCase("USDDiscretizer") ||
name.equalsIgnoreCase("USD Discretizer")) return true;
if(name.equalsIgnoreCase("UniformWidthDiscretizer") ||
name.equalsIgnoreCase("Uniform Width Discretizer"))return true;
if(name.equalsIgnoreCase("UniformFrequencyDiscretizer") ||
name.equalsIgnoreCase("Uniform Frequency Discretizer"))return true;
if(name.equalsIgnoreCase("CADD") ||
name.equalsIgnoreCase("Class-Atribute Dependent Discretizer"))return true;
return false;
}
static String getLine() {
String st=null;
do {
try {
st=br.readLine();
} catch(Exception e) {
e.printStackTrace();
System.exit(1);
}
} while(st!=null && st.equals(""));
return st;
}
}