/* Copyright 2003, Carnegie Mellon, All Rights Reserved */ package edu.cmu.minorthird.classify; import java.io.Serializable; import java.util.HashSet; import java.util.Set; /** * Defines legal formats for examples. Currently this just checks * that the class labels are in some legal set. * * @author William Cohen */ public class ExampleSchema implements Serializable{ static final long serialVersionUID=20071015; public static final String POS_CLASS_NAME="POS"; public static final String NEG_CLASS_NAME="NEG"; /** Schema for binary examples. */ public final static ExampleSchema BINARY_EXAMPLE_SCHEMA=new ExampleSchema(new String[]{POS_CLASS_NAME,NEG_CLASS_NAME}); private String[] validClassNames; private Set<String> validClassNameSet; /** Create a new scheme with the given list of validClassNames */ public ExampleSchema(final String[] validClassNames){ this.validClassNames=validClassNames; validClassNameSet=new HashSet<String>(); for(int i=0;i<validClassNames.length;i++){ validClassNameSet.add(validClassNames[i]); } } /** Added extend method to extend the schema with new class label value */ public void extend(String newClassName){ String newValidClassNames[]=new String[validClassNames.length+1]; for(int i=0;i<validClassNames.length;i++){ newValidClassNames[i]=validClassNames[i]; } newValidClassNames[validClassNames.length]=newClassName; validClassNames=newValidClassNames; validClassNameSet.add(newClassName); } /** Get an array of all valid class names. */ public String[] validClassNames(){ return validClassNames; } /** Return number of valid class names */ public int getNumberOfClasses(){ return validClassNames.length; } /** Return i-th valid class name. */ public String getClassName(int i){ return validClassNames[i]; } /** Return index of this class name, or -1 if it's not valid. */ public int getClassIndex(String name){ for(int i=0;i<validClassNames.length;i++){ if(validClassNames[i].equals(name)){ return i; } } return -1; } /** Determine if a ClassLabel is valid with respect to the schema. */ public boolean isValid(ClassLabel label){ for(String l:label.possibleLabels()){ if(!validClassNameSet.contains(l)){ return false; } } return true; } /** Determine if an example is valid with respect to the schema. */ public boolean isValid(Example e){ return isValid(e.getLabel()); } @Override public boolean equals(Object o){ if(o instanceof ExampleSchema){ ExampleSchema b=(ExampleSchema)o; return validClassNameSet.equals(b.validClassNameSet); } else{ return false; } } @Override public String toString(){ return "[ExampleSchema: "+validClassNameSet+"]"; } }