All Downloads are FREE. Search and download functionalities are using the official Maven repository.

weka.filters.AllFilter Maven / Gradle / Ivy

/*
 *   This program is free software: you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation, either version 3 of the License, or
 *   (at your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program.  If not, see .
 */

/*
 *    AllFilter.java
 *    Copyright (C) 1999-2012 University of Waikato, Hamilton, New Zealand
 *
 */


package weka.filters;

import weka.core.Capabilities;
import weka.core.Capabilities.Capability;
import weka.core.Instance;
import weka.core.Instances;
import weka.core.RevisionUtils;

/** 
 * A simple instance filter that passes all instances directly
 * through. Basically just for testing purposes.
 *
 * @author Len Trigg ([email protected])
 * @version $Revision: 12037 $
 */
public class AllFilter
  extends Filter
  implements Sourcable {

  /** for serialization */
  static final long serialVersionUID = 5022109283147503266L;

  /**
   * Returns a string describing this filter
   *
   * @return a description of the filter suitable for
   * displaying in the explorer/experimenter gui
   */
  public String globalInfo() {
    return "An instance filter that passes all instances through unmodified."
      + " Primarily for testing purposes.";
  }

  /** 
   * Returns the Capabilities of this filter.
   *
   * @return            the capabilities of this object
   * @see               Capabilities
   */
  public Capabilities getCapabilities() {
    Capabilities result = super.getCapabilities();
    result.disableAll();

    // attributes
    result.enableAllAttributes();
    result.enable(Capability.MISSING_VALUES);
    
    // class
    result.enableAllClasses();
    result.enable(Capability.MISSING_CLASS_VALUES);
    result.enable(Capability.NO_CLASS);
    
    return result;
  }

  /**
   * Sets the format of the input instances.
   *
   * @param instanceInfo 	an Instances object containing the input 
   * 				instance structure (any instances contained 
   * 				in the object are ignored - only the structure 
   * 				is required).
   * @return true 		if the outputFormat may be collected immediately
   * @throws Exception 		if something goes wrong
   */
  public boolean setInputFormat(Instances instanceInfo) throws Exception {

    super.setInputFormat(instanceInfo);
    setOutputFormat(instanceInfo);
    return true;
  }


  /**
   * Input an instance for filtering. Ordinarily the instance is processed
   * and made available for output immediately. Some filters require all
   * instances be read before producing output.
   *
   * @param instance the input instance
   * @return true if the filtered instance may now be
   * collected with output().
   * @throws IllegalStateException if no input format has been defined.
   */
  public boolean input(Instance instance) {

    if (getInputFormat() == null) {
      throw new IllegalStateException("No input instance format defined");
    }
    if (m_NewBatch) {
      resetQueue();
      m_NewBatch = false;
    }
    if (instance.dataset() == null) {
      push((Instance) instance.copy());
    } else {
      push(instance); // push() will make a copy anyway.
    }
    return true;
  }
  
  /**
   * Returns a string that describes the filter as source. The
   * filter will be contained in a class with the given name (there may
   * be auxiliary classes),
   * and will contain two methods with these signatures:
   * 

   * // converts one row
   * public static Object[] filter(Object[] i);
   * // converts a full dataset (first dimension is row index)
   * public static Object[][] filter(Object[][] i);
   * 
* where the array i contains elements that are either * Double, String, with missing values represented as null. The generated * code is public domain and comes with no warranty. * * @param className the name that should be given to the source class. * @param data the dataset used for initializing the filter * @return the object source described by a string * @throws Exception if the source can't be computed */ public String toSource(String className, Instances data) throws Exception { StringBuffer result; result = new StringBuffer(); result.append("class " + className + " {\n"); result.append("\n"); result.append(" /**\n"); result.append(" * filters a single row\n"); result.append(" * \n"); result.append(" * @param i the row to process\n"); result.append(" * @return the processed row\n"); result.append(" */\n"); result.append(" public static Object[] filter(Object[] i) {\n"); result.append(" return i;\n"); result.append(" }\n"); result.append("\n"); result.append(" /**\n"); result.append(" * filters multiple rows\n"); result.append(" * \n"); result.append(" * @param i the rows to process\n"); result.append(" * @return the processed rows\n"); result.append(" */\n"); result.append(" public static Object[][] filter(Object[][] i) {\n"); result.append(" return i;\n"); result.append(" }\n"); result.append("}\n"); return result.toString(); } /** * Returns the revision string. * * @return the revision */ public String getRevision() { return RevisionUtils.extract("$Revision: 12037 $"); } /** * Main method for testing this class. * * @param argv should contain arguments to the filter: use -h for help */ public static void main(String [] argv) { runFilter(new AllFilter(), argv); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy