package weka.classifiers.rules.ruleshandler;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Serializable;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
public class CMain implements Serializable {
static public int idBaseClasse;
static public int idMassimoClasse;
static public int[] suppClasses;
static public double transazioniTotali;
static public int MAX_CLASSES = 30; // Da modificare anche nella classe CClasse
static public double conf_threshold;
static public double supp_threshold;
public static void my_main(String[] args) {
if (args.length !=5 ) {
System.out.println("Usage: fp_new_comb <TDB> <support threshold%%> <confidence threshold%%> <stem output file> <pahtname>\n");
System.exit(1);
}
supp_threshold = Double.parseDouble(args[1]);
conf_threshold = Double.parseDouble(args[2]);
suppClasses = new int[MAX_CLASSES];
for ( int i = 0 ; i<MAX_CLASSES ; i++) {
suppClasses[i] = 0;
}
itemClasse(args[0]);
supportCountingClasses(args[0]);
CClasse[] cc = new CClasse[(idMassimoClasse-idBaseClasse)+1];
for ( int i = 0 ; i<(idMassimoClasse-idBaseClasse)+1 ; i++) {
cc[i] = new CClasse();
cc[i].estraiPerClasse(args.length,args,i);
}
return;
}
public static int itemClasse(String fileName) {
int classe = 0;
int minimo = 0;
int massimo = 0;
int flag = 0;
byte b;
int n = 0;
try {
FileInputStream fis = new FileInputStream ( fileName );
DataInputStream di = new DataInputStream(fis);
for ( int h = 0 ; h<3 ; h++ ) {
ByteBuffer bf = ByteBuffer.allocate(4);
for ( int k = 0 ; k<4 ; k++ ) {
b = di.readByte();
bf.order(ByteOrder.LITTLE_ENDIAN);
bf.put(b);
}
n = bf.getInt(0);
}
for ( int f = 0 ; f<n ; f++) {
ByteBuffer buf = ByteBuffer.allocate(4);
for ( int g = 0 ; g<4 ; g++ ) {
b = di.readByte();
buf.order(ByteOrder.LITTLE_ENDIAN);
buf.put(b);
}
classe = buf.getInt(0);
}
minimo = massimo = classe;
flag++;
while ( true ) {
for ( int h = 0 ; h<3 ; h++ ) {
ByteBuffer bf = ByteBuffer.allocate(4);
for ( int k = 0 ; k<4 ; k++ ) {
b = di.readByte();
bf.order(ByteOrder.LITTLE_ENDIAN);
bf.put(b);
}
n = bf.getInt(0);
}
for ( int f = 0 ; f<n ; f++) {
ByteBuffer buf = ByteBuffer.allocate(4);
for ( int g = 0 ; g<4 ; g++ ) {
b = di.readByte();
buf.order(ByteOrder.LITTLE_ENDIAN);
buf.put(b);
}
classe = buf.getInt(0);
}
if ( classe < minimo) {
minimo = classe;
}
if ( classe > massimo) {
massimo = classe;
}
}
} catch (EOFException eofx) {
if ( flag == 0 ) {
System.err.println("Numero di transazioni pari a 0");
System.exit(1);
}
idBaseClasse = minimo;
idMassimoClasse = massimo;
return(minimo);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return 0;
}
public static void supportCountingClasses(String fileName) {
byte b;
int n = 0;
int classe = 0;
try {
FileInputStream fis = new FileInputStream ( fileName );
DataInputStream di = new DataInputStream(fis);
while ( true ) {
for ( int h = 0 ; h<3 ; h++ ) {
ByteBuffer bf = ByteBuffer.allocate(4);
for ( int k = 0 ; k<4 ; k++ ) {
b = di.readByte();
bf.order(ByteOrder.LITTLE_ENDIAN);
bf.put(b);
}
n = bf.getInt(0);
}
for ( int f = 0 ; f<n ; f++) {
ByteBuffer buf = ByteBuffer.allocate(4);
for ( int g = 0 ; g<4 ; g++ ) {
b = di.readByte();
buf.order(ByteOrder.LITTLE_ENDIAN);
buf.put(b);
}
classe = buf.getInt(0);
}
suppClasses[classe-idBaseClasse]++;
transazioniTotali++;
}
} catch (EOFException eofx) {
return ;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return;
}
public int count_num_of_rules(String filename) {
int num = 0;
FileReader file = null;
try {
file = new FileReader(filename);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
BufferedReader buff = new BufferedReader(file);
boolean eof = false;
String line = null;
while (!eof) {
try {
line = buff.readLine();
num++;
} catch (IOException e) {
e.printStackTrace();
}
if (line == null)
eof = true;
} // end while (!eof)
try {
file.close();
} catch (IOException e) {
e.printStackTrace();
}
return num;
}
public void mergeRuleFiles(String rules_path, int classes, int current_fold, String path_name) {
FileReader file = null;
FileWriter fw = null;
String filename = null;
try {
fw = new FileWriter(rules_path);
} catch (IOException e) {
e.printStackTrace();
System.out.println("Error in opening rules during merge..");
}
for (int i = 0; i< classes; i++) {
filename = path_name+"c"+ i+"rules-k"+String.valueOf(current_fold)+ ".txt";
File my_file = new File(filename);
if (my_file.exists()) {
try {
file = new FileReader(filename);
} catch (Exception e) {
e.printStackTrace();
System.out.println("Error in opening rules during merge..");
}
BufferedReader buff = new BufferedReader(file);
boolean eof = false;
String line = null;
try {
while (!eof) {
line = buff.readLine();
if (line == null)
eof = true;
else
fw.write(line+"\n");
} // end while (!eof)
file.close();
} catch (IOException e) {
e.printStackTrace();
}
}// end if (my_file.exists())
} // end for
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}