[jboss-svn-commits] JBL Code SVN: r19268 - labs/jbossrules/contrib/machinelearning/decisiontree/src/id3.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Mar 27 17:35:03 EDT 2008
Author: gizil
Date: 2008-03-27 17:35:03 -0400 (Thu, 27 Mar 2008)
New Revision: 19268
Added:
labs/jbossrules/contrib/machinelearning/decisiontree/src/id3/ObjectReader.java
labs/jbossrules/contrib/machinelearning/decisiontree/src/id3/ReadingSeq.java
Modified:
labs/jbossrules/contrib/machinelearning/decisiontree/src/id3/BocukObjectExample.java
labs/jbossrules/contrib/machinelearning/decisiontree/src/id3/FactSetFactory.java
labs/jbossrules/contrib/machinelearning/decisiontree/src/id3/OOFactSet.java
labs/jbossrules/contrib/machinelearning/decisiontree/src/id3/Util.java
labs/jbossrules/contrib/machinelearning/decisiontree/src/id3/WorkingMemory.java
Log:
drl files are being contructed by reading the attribute values of the objects from a text file
Modified: labs/jbossrules/contrib/machinelearning/decisiontree/src/id3/BocukObjectExample.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/decisiontree/src/id3/BocukObjectExample.java 2008-03-27 19:30:45 UTC (rev 19267)
+++ labs/jbossrules/contrib/machinelearning/decisiontree/src/id3/BocukObjectExample.java 2008-03-27 21:35:03 UTC (rev 19268)
@@ -21,12 +21,12 @@
facts.add(new RestaurantOld(true, true, true, true, "Full", 1, false, false, "Burger", "30-60", true));
WorkingMemory simple = new WorkingMemory();
+ OOFactSet fs = simple.getFactSet(arest.getClass());
-
for(Object r: facts) {
try {
- simple.insert(r);
-
+ //simple.insert(element)
+ fs.insert(r);
} catch (Exception e) {
System.out.println("Inserting element "+ r + " and "+ e);
}
Modified: labs/jbossrules/contrib/machinelearning/decisiontree/src/id3/FactSetFactory.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/decisiontree/src/id3/FactSetFactory.java 2008-03-27 19:30:45 UTC (rev 19267)
+++ labs/jbossrules/contrib/machinelearning/decisiontree/src/id3/FactSetFactory.java 2008-03-27 21:35:03 UTC (rev 19268)
@@ -1,100 +1,112 @@
package id3;
import java.io.BufferedReader;
+import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.List;
public class FactSetFactory {
-
+
public static String insertNurserySet(WorkingMemory simple) {
/*
- * not_recom, recommend, very_recom, priority, spec_prior
-
- | attributes
-
- parents: usual, pretentious, great_pret.
- has_nurs: proper, less_proper, improper, critical, very_crit.
- form: complete, completed, incomplete, foster.
- children: 1, 2, 3, more.
- housing: convenient, less_conv, critical.
- finance: convenient, inconv.
- social: nonprob, slightly_prob, problematic.
- health: recommended, priority, not_recom.
-
+ * not_recom, recommend, very_recom, priority, spec_prior | attributes
+ *
+ * parents: usual, pretentious, great_pret. has_nurs: proper,
+ * less_proper, improper, critical, very_crit. form: complete,
+ * completed, incomplete, foster. children: 1, 2, 3, more. housing:
+ * convenient, less_conv, critical. finance: convenient, inconv. social:
+ * nonprob, slightly_prob, problematic. health: recommended, priority,
+ * not_recom.
+ *
*/
String filename = "../data/nursery/nursery.data.txt";
String separator = ",";
String klass = "Nursery";
ArrayList<Domain<?>> domains = new ArrayList<Domain<?>>();
- domains.add(new LiteralDomain("parents", new String[]{"usual", "pretentious", "great_pret"}));
- domains.add(new LiteralDomain("has_nurs", new String[]{"proper", "less_proper", "improper", "critical", "very_crit"}));
- domains.add(new LiteralDomain("form", new String[]{"complete", "completed", "incomplete", "foster"}));
- domains.add(new LiteralDomain("children", new String[]{"1", "2", "3", "more"}));
- domains.add(new LiteralDomain("housing", new String[]{"convenient", "less_conv", "critical"}));
- domains.add(new LiteralDomain("finance", new String[]{"convenient", "inconv"}));
- domains.add(new LiteralDomain("social", new String[]{"nonprob", "slightly_prob", "problematic"}));
- domains.add(new LiteralDomain("health", new String[]{"recommended", "priority", "not_recom"}));
- domains.add(new LiteralDomain("classnursery", new String[]{"not_recom", "recommend", "very_recom", "priority", "spec_prior"}));
+ domains.add(new LiteralDomain("parents", new String[] { "usual",
+ "pretentious", "great_pret" }));
+ domains.add(new LiteralDomain("has_nurs", new String[] { "proper",
+ "less_proper", "improper", "critical", "very_crit" }));
+ domains.add(new LiteralDomain("form", new String[] { "complete",
+ "completed", "incomplete", "foster" }));
+ domains.add(new LiteralDomain("children", new String[] { "1", "2", "3",
+ "more" }));
+ domains.add(new LiteralDomain("housing", new String[] { "convenient",
+ "less_conv", "critical" }));
+ domains.add(new LiteralDomain("finance", new String[] { "convenient",
+ "inconv" }));
+ domains.add(new LiteralDomain("social", new String[] { "nonprob",
+ "slightly_prob", "problematic" }));
+ domains.add(new LiteralDomain("health", new String[] { "recommended",
+ "priority", "not_recom" }));
+ domains.add(new LiteralDomain("classnursery", new String[] {
+ "not_recom", "recommend", "very_recom", "priority",
+ "spec_prior" }));
- for (Domain<?> d: domains) {
+ for (Domain<?> d : domains) {
d.setConstant();
}
try {
- FactSetFactory.fromFile(simple, filename, klass, domains , separator);
- //simple.insert(facts);
+ FactSetFactory
+ .fromFile(simple, filename, klass, domains, separator);
+ // simple.insert(facts);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
-
+
return klass;
}
public static String insertCarSet(WorkingMemory simple) {
/*
* | class values
-
- unacc, acc, good, vgood
-
- | attributes
-
- buying: vhigh, high, med, low.
- maint: vhigh, high, med, low.
- doors: 2, 3, 4, 5, more.
- persons: 2, 4, more.
- lug_boot: small, med, big.
- safety: low, med, high.
-
+ *
+ * unacc, acc, good, vgood | attributes
+ *
+ * buying: vhigh, high, med, low. maint: vhigh, high, med, low. doors:
+ * 2, 3, 4, 5, more. persons: 2, 4, more. lug_boot: small, med, big.
+ * safety: low, med, high.
+ *
*/
String filename = "../data/car/car.data.txt";
String separator = ",";
String klass = "Car";
ArrayList<Domain<?>> domains = new ArrayList<Domain<?>>();
- domains.add(new LiteralDomain("buying", new String[]{"vhigh", "high", "med", "low"}));
- domains.add(new LiteralDomain("maint", new String[]{"vhigh", "high", "med", "low"}));
- domains.add(new LiteralDomain("doors", new String[]{"2", "3", "4", "5more"}));
- domains.add(new LiteralDomain("persons", new String[]{"2", "4", "more"}));
- domains.add(new LiteralDomain("lug_boot", new String[]{"small", "med", "big"}));
- domains.add(new LiteralDomain("safety", new String[]{"low", "med", "high"}));
- domains.add(new LiteralDomain("classCar", new String[]{"unacc", "acc", "good", "vgood"}));
+ domains.add(new LiteralDomain("buying", new String[] { "vhigh", "high",
+ "med", "low" }));
+ domains.add(new LiteralDomain("maint", new String[] { "vhigh", "high",
+ "med", "low" }));
+ domains.add(new LiteralDomain("doors", new String[] { "2", "3", "4",
+ "5more" }));
+ domains.add(new LiteralDomain("persons", new String[] { "2", "4",
+ "more" }));
+ domains.add(new LiteralDomain("lug_boot", new String[] { "small",
+ "med", "big" }));
+ domains.add(new LiteralDomain("safety", new String[] { "low", "med",
+ "high" }));
+ domains.add(new LiteralDomain("classCar", new String[] { "unacc",
+ "acc", "good", "vgood" }));
- for (Domain<?> d: domains) {
+ for (Domain<?> d : domains) {
d.setConstant();
}
try {
- FactSetFactory.fromFile(simple, filename, klass, domains , separator);
- //simple.insert(facts);
+ FactSetFactory
+ .fromFile(simple, filename, klass, domains, separator);
+ // simple.insert(facts);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
-
+
return klass;
}
@@ -103,16 +115,18 @@
String filename = "../data/advertisement/ad.data.txt";
String separator = ",";
String klass = "Advertisement";
-
+
String domainFileName = "../data/advertisement/data_domains.txt";
String separatorDomain = ":";
ArrayList<Domain<?>> domains;
- //FSFactSet facts;
+ // FSFactSet facts;
try {
- domains = FactSetFactory.fromFileDomain(domainFileName, separatorDomain);
-
- FactSetFactory.fromFile(simple, filename, klass, domains , separator);
- //simple.insert(facts);
+ domains = FactSetFactory.fromFileDomain(domainFileName,
+ separatorDomain);
+
+ FactSetFactory
+ .fromFile(simple, filename, klass, domains, separator);
+ // simple.insert(facts);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
@@ -121,22 +135,18 @@
}
-
-
public static ArrayList<String> attributesOfAdvertisement = new ArrayList<String>();
-
+ public static ArrayList<Domain<?>> fromFileDomain(String domainFileName,
+ String separator) throws Exception {
- public static ArrayList<Domain<?>> fromFileDomain(String domainFileName, String separator)
- throws Exception {
-
ArrayList<Domain<?>> domains = new ArrayList<Domain<?>>();
NumericDomain height = new NumericDomain("height");
height.setContinuous();
-
+
NumericDomain width = new NumericDomain("width");
height.setContinuous();
-
+
NumericDomain aratio = new NumericDomain("aratio");
height.setContinuous();
domains.add(height);
@@ -144,53 +154,110 @@
domains.add(aratio);
BufferedReader reader = new BufferedReader(new InputStreamReader(
- FactSetFactory.class.getResourceAsStream( domainFileName )));//"../data/" +
+ FactSetFactory.class.getResourceAsStream(domainFileName)));// "../data/"
+ // +
String line;
while ((line = reader.readLine()) != null) {
if (!line.startsWith("|")) {
- List<String> attributeValues = Arrays.asList(line.split(separator, 2));
- //BooleanDomain newDomain =
+ List<String> attributeValues = Arrays.asList(line.split(
+ separator, 2));
+ // BooleanDomain newDomain =
attributesOfAdvertisement.add(attributeValues.get(0));
domains.add(new BooleanDomain(attributeValues.get(0)));
}
}
-
- domains.add(new LiteralDomain("classAdvertisement", new String[]{"ad", "nonad"}));
+
+ domains.add(new LiteralDomain("classAdvertisement", new String[] {
+ "ad", "nonad" }));
attributesOfAdvertisement.add("classAdvertisement");
- System.out.println("# of domains:"+ domains.size());
+ System.out.println("# of domains:" + domains.size());
return domains;
}
- public static void fromFile(WorkingMemory wm, String filename, String klass,List<Domain<?>> domains,String separator)
- throws Exception {
-// FSFactSet fs = new FSFactSet(klass, domains);
-//
-// for (Domain<?> d: domains) {
-// fs.addDomain(d.getName(), d);
-// }
+ public static void fromFile(WorkingMemory wm, String filename,
+ String klass, List<Domain<?>> domains, String separator)
+ throws Exception {
+ // FSFactSet fs = new FSFactSet(klass, domains);
+ //
+ // for (Domain<?> d: domains) {
+ // fs.addDomain(d.getName(), d);
+ // }
+
BufferedReader reader = new BufferedReader(new InputStreamReader(
- FactSetFactory.class.getResourceAsStream( filename )));//"../data/" +
+ FactSetFactory.class.getResourceAsStream(filename)));// "../data/"
+ // +
String line;
while ((line = reader.readLine()) != null) {
-// Fact newFact = fromString(line,domains,separator);
-// fs.add(newFact);
- //String element, String name, String separator, List<Domain<?>> domains
+ // Fact newFact = fromString(line,domains,separator);
+ // fs.add(newFact);
+ // String element, String name, String separator, List<Domain<?>>
+ // domains
line = line.trim();
- if (line.length()==0)
+ if (line.length() == 0)
break;
- wm.insert(line,klass, separator,domains);
+ wm.insert(line, klass, separator, domains);
}
}
-
+ public static boolean readObjectData(WorkingMemory simple, String filename,
+ String separator, Object nullObj) {
+ /*
+ * | class values
+ *
+ * unacc, acc, good, vgood
+ * | attributes
+ *
+ * buying: vhigh, high, med, low.
+ * maint: vhigh, high, med, low.
+ * doors: 2, 3, 4, 5, more.
+ * persons: 2, 4, more.
+ * lug_boot: small, med, big.
+ * safety: low, med, high.
+ *
+ */
+ // String[] attr_order = {"buying", "maint", "doors", "persons", "lug_boot", "safety"
+ // String filename = "../data/car/car.data.txt";
+ // String separator = ",";
+ // Car nullCar = new Car();
+
- public static Fact fromObject(Object data, List<Domain<?>> domains) {
- Fact newfact = new Fact();
- return newfact;
+ try {
+ FactSetFactory.fromFileAsObject(simple, nullObj.getClass(), filename, separator);
+
+ // simple.insert(facts);
+ return true;
+ } catch (Exception e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ return false;
}
+ public static void fromFileAsObject(WorkingMemory wm, Class<?> klass, String filename, String separator)
+ throws IOException {
+ OOFactSet fs = wm.getFactSet(klass);
+ Collection<Domain<?>> domains = fs.getDomains();
+
+ BufferedReader reader = new BufferedReader(new InputStreamReader(
+ FactSetFactory.class.getResourceAsStream(filename)));// "../data/"
+ // +
+ String line;
+ while ((line = reader.readLine()) != null) {
+ // Fact newFact = fromString(line,domains,separator);
+ // fs.add(newFact);
+ // String element, String name, String separator, List<Domain<?>>
+ // domains
+ line = line.trim();
+ if (line.length() == 0)
+ break;
+ Object element = ObjectReader.read(klass, domains, line, separator);
+ //System.out.println("New object "+ element);
+ fs.insert(element);
+ }
+ return;
+ }
-
}
Modified: labs/jbossrules/contrib/machinelearning/decisiontree/src/id3/OOFactSet.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/decisiontree/src/id3/OOFactSet.java 2008-03-27 19:30:45 UTC (rev 19267)
+++ labs/jbossrules/contrib/machinelearning/decisiontree/src/id3/OOFactSet.java 2008-03-27 21:35:03 UTC (rev 19268)
@@ -39,8 +39,9 @@
Method [] element_methods = element_class.getDeclaredMethods();
for (Method m: element_methods) {
String m_name = m.getName();
- String return_type_name = m.getReturnType().getName();
- if (Util.isGetter(m_name) & Util.isSimpleType(return_type_name) ) {
+ //Class<?> return_type_name = ;
+ Class<?>[] returns = {m.getReturnType()};
+ if (Util.isGetter(m_name) & Util.isSimpleType(returns) ) {
// if (!Util.isSimpleType(return_type_name))
// continue; // in the future we should support classes
String field = Util.getAttributeName(m_name);
Added: labs/jbossrules/contrib/machinelearning/decisiontree/src/id3/ObjectReader.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/decisiontree/src/id3/ObjectReader.java (rev 0)
+++ labs/jbossrules/contrib/machinelearning/decisiontree/src/id3/ObjectReader.java 2008-03-27 21:35:03 UTC (rev 19268)
@@ -0,0 +1,268 @@
+package id3;
+
+
+import java.io.IOException;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+
+public class ObjectReader {
+
+ private static final boolean DEBUG = false;
+
+ //read(Class<?> element_class, Collection<Domain<?>> collection, String data, String separator)
+ public static Object read(Class<?> element_class, Collection<Domain<?>> domains, String data, String separator) {
+
+ Object element= null;
+ try {
+ //element = Class.forName(element_class.getName());
+
+ element = element_class.newInstance();
+ } catch (InstantiationException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ Method [] element_methods = element_class.getDeclaredMethods();
+
+ if (data.endsWith("."))
+ data = data.substring(0, data.length()-1);
+ List<String> attributeValues = Arrays.asList(data.split(separator));
+
+
+ for (Method m: element_methods) {
+ String m_name = m.getName();
+ Class<?>[] param_type_name = m.getParameterTypes();
+ if (Util.isSetter(m_name) & Util.isSimpleType(param_type_name) ) {
+// if (!Util.isSimpleType(return_type_name))
+// continue; // in the future we should support classes
+ Annotation[] annotations = m.getAnnotations();
+
+ // iterate over the annotations to locate the MaxLength constraint if it exists
+ ReadingSeq sequence = null;
+ for (Annotation a : annotations) {
+ if (a instanceof ReadingSeq) {
+ sequence = (ReadingSeq)a; // here it is !!!
+ break;
+ }
+ }
+ if (DEBUG) System.out.println("What annotation i found: "+ sequence + " for method "+ m);
+ String fieldString = attributeValues.get(sequence.value());
+ String field = Util.getAttributeName(m_name);
+
+ Iterator<Domain<?>> domain_it = domains.iterator();
+ //Iterator<String> value_it = attributeValues.iterator();
+ while(domain_it.hasNext()){
+ Domain<?> attr_domain = domain_it.next();
+ //String name = attr_domain.getName();
+ if (field.equalsIgnoreCase(attr_domain.getName())) {
+ //String fieldValue = attr_domain.readString(fieldString);
+ String fieldValue = fieldString;
+
+ try {
+
+ if (DEBUG) System.out.println("ObjectReader.read obj "+ element.getClass() + " fielddomain name "+attr_domain.getName()+" value: "+fieldValue);
+ if (DEBUG) System.out.println("ObjectReader.read method "+ m + " the parameter type:"+ fieldValue.getClass());
+ m.invoke(element, fieldValue);
+
+ } catch (IllegalArgumentException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (InvocationTargetException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ break;
+ }
+
+
+ }
+ }
+ }
+
+ return element;
+
+
+ }
+
+
+ // ------------------------------------------------------------------
+ void read_fields(Object obj, Object classobj) throws Exception {
+ Class<?> cl;
+ Field fields[];
+
+ //level++;
+
+ // Get a handle to the class of the object.
+ cl = (classobj instanceof Class) ? (Class) classobj : classobj
+ .getClass();
+
+ // detect when we've reached out limits. This is particularly
+ // the case when we're traversing the superclass chain.
+ if ((cl == null) || (cl.isInstance(new Object()))) {
+ //level--;
+ return;
+ }
+
+ // comment is silently skipped so nothing to do here.
+
+ // process each field in turn.
+ fields = cl.getDeclaredFields();
+ for (int i = 0; i < fields.length; i++) {
+ Class ctype = fields[i].getType();
+ int mod;
+ String typeName = null, varName = null;
+
+ mod = fields[i].getModifiers();
+ if (Modifier.isStatic(mod))
+ continue;
+
+ Object varValue = null;
+ // primitive types are handled directly.
+ if (ctype.isPrimitive()) {
+ varName = fields[i].getName();
+
+ if (ctype.equals(Boolean.TYPE) || ctype.equals(Character.TYPE)
+ || ctype.equals(Byte.TYPE) || ctype.equals(Short.TYPE)
+ || ctype.equals(Integer.TYPE)
+ || ctype.equals(Long.TYPE) || ctype.equals(Float.TYPE)
+ || ctype.equals(Double.TYPE))
+ handle_instance_field(ctype.getName(), varName, obj, fields[i],
+ varValue );
+ else if (ctype.equals(Void.TYPE))
+ throw new IOException("read_fields: VOID type field found!");
+ else
+ throw new IOException("read_fields: unknown primitive type");
+
+ // for arrays we need to extract the underlying type 1st
+ }
+ // else if (ctype.isArray()) {
+ // StringTokenizer st = null;
+ // int dim;
+ // Object nval = null;
+ //
+ // typeName = readToken();
+ // if (typeName.equals("class"))
+ // typeName = readToken();
+ // varName = readToken();
+ // readToken(); // skip "="
+ // readToken(); // skip curly brace
+ //
+ // st = new StringTokenizer(varName, "[]");
+ // st.nextToken(); // skip var name
+ //
+ // dim = Integer.parseInt(st.nextToken());
+ //
+ // // no support for multi-dim arrays yet
+ // if (st.hasMoreTokens())
+ // throw new IOException(
+ // "multi-dimensional array found - only one dimensional arrays
+ // supported");
+ //
+ // // if the constructor didn't make one for us...
+ // if (fields[i].get(obj) == null) {
+ // fields[i].set(obj, Array.newInstance(ctype
+ // .getComponentType(), dim));
+ // }
+ //
+ // // pull in each element of the array
+ // for (int j = 0; j < dim; j++) {
+ // handle_array_field(typeName, varName, obj, fields[i], j);
+ // }
+ // readToken(); // skip curly brace
+ // }
+ else {
+
+ // Strings need special care
+ if (ctype.isInstance(new String())) {
+ typeName = ctype.getName();
+ varName = fields[i].getName();
+ handle_instance_field(typeName, varName, obj, fields[i],
+ varValue);
+
+ // recurse as everything else is another class
+ }
+ // else {
+ // Object nval = readAsciiObject();
+ //
+ // handle_instance_field(typeName, varName, obj, fields[i],
+ // nval);
+ // }
+ else {
+ continue;
+ }
+ }
+ }
+
+ //level--;
+ }
+
+ // ------------------------------------------------------------------
+ // pull in a single field which isn't an array or a non-string class
+ public static void handle_instance_field(String tname, String fname,
+ Object obj, Field fl, Object value) throws IOException {
+
+ String svalue = null;
+
+ // Some sanity and 'do nothing' tests
+ if (value == null)
+ return;
+ if (value == null)
+ return;
+
+ // Convenience to save lots of casts later.
+ if (value instanceof String) {
+ svalue = (String) value;
+
+ if (svalue.equals("null"))
+ return;
+ }
+
+ // now try to run the assignments
+ try {
+ if (fl.getType().equals(Boolean.TYPE))
+ fl.set(obj, new Boolean(svalue));
+ else if (fl.getType().equals(Character.TYPE)) {
+ char[] onechar = new char[1];
+ svalue.getChars(0, 1, onechar, 0);
+ fl.set(obj, new Character(onechar[0]));
+ } else if (fl.getType().equals(Byte.TYPE))
+ fl.set(obj, new Byte(svalue));
+ else if (fl.getType().equals(Short.TYPE))
+ fl.set(obj, new Short(svalue));
+ else if (fl.getType().equals(Integer.TYPE))
+ fl.set(obj, new Integer(svalue));
+ else if (fl.getType().equals(Long.TYPE))
+ fl.set(obj, new Long(svalue));
+ else if (fl.getType().equals(Float.TYPE))
+ fl.set(obj, new Float(svalue));
+ else if (fl.getType().equals(Double.TYPE))
+ fl.set(obj, new Double(svalue));
+ else if (fl.getType().equals((new String("").getClass())))
+ fl.set(obj, value);
+ else
+ fl.set(obj, value);
+ } catch (Exception e) {
+ System.err.println("ERROR: assigning to " + fl + "\n" + "\tread: "
+ + tname + " " + fname + " = " + value);
+ throw new IOException("field assignment failure:" + e);
+ }
+ }
+
+
+
+}
Added: labs/jbossrules/contrib/machinelearning/decisiontree/src/id3/ReadingSeq.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/decisiontree/src/id3/ReadingSeq.java (rev 0)
+++ labs/jbossrules/contrib/machinelearning/decisiontree/src/id3/ReadingSeq.java 2008-03-27 21:35:03 UTC (rev 19268)
@@ -0,0 +1,9 @@
+package id3;
+
+import java.lang.annotation.*;
+
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.METHOD)
+public @interface ReadingSeq {
+ int value();
+}
Modified: labs/jbossrules/contrib/machinelearning/decisiontree/src/id3/Util.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/decisiontree/src/id3/Util.java 2008-03-27 19:30:45 UTC (rev 19267)
+++ labs/jbossrules/contrib/machinelearning/decisiontree/src/id3/Util.java 2008-03-27 21:35:03 UTC (rev 19268)
@@ -11,15 +11,16 @@
}
//private static HashSet<String> simpletype = new HashSet<String>(0);
- public static boolean isSimpleType(String type_name) {
+ public static boolean isSimpleType(Class<?>[] type_name) {
// simpletype.contains(type_name)
- if (type_name.equalsIgnoreCase("boolean") ||
- type_name.equalsIgnoreCase("int") ||
- type_name.equalsIgnoreCase("double") ||
- type_name.equalsIgnoreCase("float") ||
- type_name.equalsIgnoreCase("java.lang.String"))
- return true;
- return false;
+ if (type_name.length==1 && (type_name[0].getName().equalsIgnoreCase("boolean") ||
+ type_name[0].getName().equalsIgnoreCase("int") ||
+ type_name[0].getName().equalsIgnoreCase("double") ||
+ type_name[0].getName().equalsIgnoreCase("float") ||
+ type_name[0].getName().equalsIgnoreCase("java.lang.String")))
+ return true;
+ else
+ return false;
}
public static boolean isGetter(String method_name) {
@@ -27,9 +28,15 @@
return true;
return false;
}
+
+ public static boolean isSetter(String m_name) {
+ if (m_name.startsWith("set") )
+ return true;
+ return false;
+ }
public static String getAttributeName(String method_name) {
- if (method_name.startsWith("get"))
+ if (method_name.startsWith("get") || method_name.startsWith("set"))
return method_name.substring(3, method_name.length()).toLowerCase();
else if (method_name.startsWith("is"))
return method_name.substring(2, method_name.length()).toLowerCase();
@@ -40,4 +47,6 @@
return Math.log(prob) / Math.log(2);
}
+
+
}
\ No newline at end of file
Modified: labs/jbossrules/contrib/machinelearning/decisiontree/src/id3/WorkingMemory.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/decisiontree/src/id3/WorkingMemory.java 2008-03-27 19:30:45 UTC (rev 19267)
+++ labs/jbossrules/contrib/machinelearning/decisiontree/src/id3/WorkingMemory.java 2008-03-27 21:35:03 UTC (rev 19268)
@@ -15,6 +15,21 @@
factsets = new Hashtable<String, FactSet>();
domainset = new Hashtable<String, Domain<?>>();
}
+
+ public OOFactSet getFactSet(Class<?> klass) {
+ String element_class = klass.getName();
+ //System.out.println("Get the keys:"+ factsets.keys());
+ //System.out.println("WorkingMemory.get class "+ element_class + " exist? "+ factsets.containsKey(element_class));
+
+ OOFactSet fs;
+ if (!factsets.containsKey(element_class))
+ fs = create_factset(klass);
+ else
+ fs = (OOFactSet) factsets.get(element_class);//TODO should i cast
+
+ System.out.println("WorkingMemory.getFactSet(objClass) inserted element new fs "+ klass.getName());
+ return fs;
+ }
public void insert(Object element) {
String element_class = element.getClass().getName();
@@ -23,7 +38,7 @@
OOFactSet fs;
if (!factsets.containsKey(element_class))
- fs = create_factset(element);
+ fs = create_factset(element.getClass());
else
fs = (OOFactSet) factsets.get(element_class);//TODO should i cast
@@ -51,26 +66,6 @@
fs.insert(element, domains, separator);
//System.out.println("WorkingMemory.insert(string) inserted element fs.size() "+ fs.getSize());
}
-
-// public void insert(FactSet fs) {
-// System.out.println("factset : "+ fs.getSize());
-// if (!factsets.containsKey(fs.getClassName())) {
-// for (Domain<?> d : fs.getDomains()) {
-// System.out.println("Domain"+ d.getName());
-// if (domainset.containsKey(d.getName()) || domainset.contains(d))
-// System.out.println("Already exist domain bla?????");
-// else
-// domainset.put(d.getName(), d);
-//
-// //System.out.println("WorkingMemory.create_factset field "+ field + " fielddomain name "+fieldDomain.getName()+" return_type_name: "+return_type_name+".");
-//
-//
-// }
-// factsets.put(fs.getClassName(), fs);
-// } else {
-// System.out.println("Already exist bla?????");
-// }
-// }
/* factset workingmemory.createnew_factset(class)
@@ -84,20 +79,19 @@
* newfs.adddomain(d)=> why do you add this the factset?
* we said that the domains should be independent from the factset
*/
- private OOFactSet create_factset(Object element) {
+ private OOFactSet create_factset(Class<?> classObj) {
//System.out.println("WorkingMemory.create_factset element "+ element );
- Class<?> element_class = element.getClass();
- OOFactSet newfs = new OOFactSet(element_class);
+ OOFactSet newfs = new OOFactSet(classObj);
- Method [] element_methods = element_class.getDeclaredMethods();
+ Method [] element_methods = classObj.getDeclaredMethods();
for( Method m: element_methods) {
String m_name = m.getName();
- String return_type_name = m.getReturnType().getName();
+ Class<?>[] returns = {m.getReturnType()};
//System.out.println("WorkingMemory.create_factset m "+ m + " method name "+m_name+" return_type_name: "+return_type_name+".");
- if (Util.isGetter(m_name) & Util.isSimpleType(return_type_name)) {
+ if (Util.isGetter(m_name) & Util.isSimpleType(returns)) {
String field = Util.getAttributeName(m_name);
/*
* when u first read the element
@@ -123,7 +117,7 @@
}
}
- factsets.put(element_class.getName(), newfs);
+ factsets.put(classObj.getName(), newfs);
return newfs;
}
More information about the jboss-svn-commits
mailing list