package pikater.ontology.messages; import jade.content.Concept; import jade.util.leap.ArrayList; import jade.util.leap.Iterator; import jade.util.leap.List; import weka.core.FastVector; public class DataInstances implements Concept { /** * */ private static final long serialVersionUID = 4166896666680482675L; private List attributes; private List instances; private String name; private int class_index; /** * @return the name */ public String getName() { return name; } /** * @param name * the name to set */ public void setName(String name) { this.name = name; } /** * @return the attributes */ public List getAttributes() { return attributes; } /** * @param attributes * the attributes to set */ public void setAttributes(List attributes) { this.attributes = attributes; } /** * @return the instaces */ public List getInstances() { return instances; } /** * @param instaces * the instaces to set */ public void setInstances(List instances) { this.instances = instances; } // ============================= public int getClass_index() { return class_index; } public void setClass_index(int classIndex) { class_index = classIndex; } public weka.core.Instances toWekaInstances() { // attributes FastVector wattrs = new FastVector(); Iterator itr = attributes.iterator(); while (itr.hasNext()) { Attribute attr = (Attribute) itr.next(); wattrs.addElement(attr.toWekaAttribute()); } // data instances weka.core.Instances winsts = new weka.core.Instances(name, wattrs, instances.size()); itr = instances.iterator(); while (itr.hasNext()) { Instance inst = (Instance) itr.next(); Iterator itrval = inst.getValues().iterator(); Iterator itrmis = inst.getMissing().iterator(); double[] vals = new double[wattrs.size()]; for (int i = 0; i < wattrs.size(); i++) { if ((Boolean) itrmis.next()) { vals[i] = weka.core.Instance.missingValue(); } else { vals[i] = (Double) itrval.next(); } } weka.core.Instance winst = new weka.core.Instance(1, vals); winst.setDataset(winsts); winsts.add(winst); } winsts.setClassIndex(this.class_index); return winsts; } public void fillWekaInstances(weka.core.Instances winsts) { // set name setName(winsts.relationName()); // set attributes List onto_attrs = new ArrayList(); for (int i = 0; i < winsts.numAttributes(); i++) { Attribute a = new Attribute(); a.fillWekaAttribute(winsts.attribute(i)); onto_attrs.add(a); } setAttributes(onto_attrs); // set instances List onto_insts = new ArrayList(); for (int i = 0; i < winsts.numInstances(); i++) { Instance inst = new Instance(); weka.core.Instance winst = winsts.instance(i); List instvalues = new ArrayList(); List instmis = new ArrayList(); for (int j = 0; j < winst.numValues(); j++) { if (winst.isMissing(j)) { instvalues.add(new Double(0.0)); instmis.add(new Boolean(true)); } else { instvalues.add(new Double(winst.value(j))); instmis.add(new Boolean(false)); } } inst.setValues(instvalues); inst.setMissing(instmis); onto_insts.add(inst); } setInstances(onto_insts); setClass_index(winsts.classIndex()); } /* * returns all instances as a multi-line string */ @Override public String toString() { if (instances == null) { return ""; } StringBuffer text = new StringBuffer(); Iterator institr = instances.iterator(); while (institr.hasNext()) { Instance inst = (Instance) institr.next(); text.append(inst.toString(this)); text.append('\n'); } return text.toString(); } /* returns a value in the table on the row and index */ public String toString(int row, int index) { if (instances == null) { return ""; } Instance inst = (Instance) instances.get(row); return inst.toString(this, index); } /* * public void print(){ } System.out.println(name); * System.out.println("Atributy:"); Iterator itr = attributes.iterator(); * while(itr.hasNext()){ Attribute attr = (Attribute)itr.next(); * attr.print(); System.out.println(); } System.out.println("Instance:"); * itr = instances.iterator(); while(itr.hasNext()){ Instance inst = * (Instance)itr.next(); inst.print(); System.out.println(); } } */ }