[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