package weka.classifiers.rules;
import java.io.*;
import java.util.*;
import java.util.ArrayList;
import java.io.IOException;
public class RuleL3 {
// attributes
private int Rule_ID;
private int Class_ID;
private int Length;
private int Absolute_Support;
private float Confidence;
private Item Items[];
private int Correct;
private int Incorrect;
private int Level;
// constructors
public RuleL3() {
}
public RuleL3(String rule, int id) throws IOException {
this.Rule_ID = id;
String regex = "->";
String compact_rule= rule.split(regex)[1];
ArrayList<Double> list = new ArrayList<Double>();
StringReader str = new StringReader(compact_rule);
StreamTokenizer stok = new StreamTokenizer(str);
stok.parseNumbers();
stok.nextToken();
while (stok.ttype != StreamTokenizer.TT_EOF) {
if (stok.ttype == StreamTokenizer.TT_NUMBER)
list.add( new Double(stok.nval));
stok.nextToken();
}
this.Class_ID = (int)list.get(0).doubleValue();
this.Length = (int)list.get(3).doubleValue();
this.Absolute_Support = (int)list.get(1).doubleValue();
this.Confidence = (float)list.get(2).doubleValue();
this.Items = new Item[this.Length];
for (int i = 0; i < this.Length; i++)
this.Items[i] = new Item((int)list.get(4+i).doubleValue());
Arrays.sort(this.Items);
this.Correct = 0;
this.Incorrect = 0;
this.Level = 0;
}
// methods
public int getRule_ID() {
return Rule_ID;
}
public int getClass_ID() {
return Class_ID;
}
public int getLength() {
return Length;
}
public int getAbsolute_Support() {
return Absolute_Support;
}
public float getConfidence() {
return Confidence;
}
public Item[] getItems() {
return Items;
}
public int getCorrect() {
return Correct;
}
public int getIncorrect() {
return Incorrect;
}
public int getLevel() {
return Level;
}
public void classifyTrans(Transaction trans) {
boolean matches = true;
int i = 0;
int j = 0;
while (matches && i<this.Items.length) {
j=0;
matches = false;
while (!matches && j<trans.getItems().length) {
if (this.Items[i].getValue()==trans.getItems()[j].getValue())
matches = true;
j++;
}
i++;
}
if (matches) {
trans.setLast_Rule(Rule_ID);
if (this.Class_ID == trans.getClass_ID())
this.Correct++;
else
this.Incorrect++;
}
}
public void setLevel() {
if (this.Correct > 0)
this.Level = 1;
else if (this.Correct == 0 && this.Incorrect == 0)
this.Level = 2;
}
}