⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filter.java

📁 代码是一个分类器的实现,其中使用了部分weka的源代码。可以将项目导入eclipse运行
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* *    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 2 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, write to the Free Software *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *//* *    Filter.java *    Copyright (C) 2002 Mark Hall * */package weka.gui.beans;import java.util.Vector;import java.util.EventObject;import java.util.Hashtable;import java.util.Enumeration;import javax.swing.JPanel;import javax.swing.JLabel;import javax.swing.JTextField;import java.awt.BorderLayout;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.InputEvent;import java.awt.*;import java.io.Serializable;import java.io.Reader;import java.io.BufferedReader;import java.io.FileReader;import java.io.File;import javax.swing.ImageIcon;import javax.swing.SwingConstants;import java.beans.EventSetDescriptor;import weka.core.Instance;import weka.core.Instances;import weka.filters.*;import weka.gui.Logger;/** * A wrapper bean for Weka filters * * @author <a href="mailto:mhall@cs.waikato.ac.nz">Mark Hall</a> * @version $Revision: 1.14 $ */public class Filter extends JPanel  implements BeanCommon, Visible, WekaWrapper,	     Serializable, UserRequestAcceptor,	     TrainingSetListener, TestSetListener,	     TrainingSetProducer, TestSetProducer,	     DataSource, DataSourceListener, 	     InstanceListener, EventConstraints {  protected BeanVisual m_visual =     new BeanVisual("Filter",		   BeanVisual.ICON_PATH+"DefaultFilter.gif",		   BeanVisual.ICON_PATH+"DefaultFilter_animated.gif");  private static int IDLE = 0;  private static int FILTERING_TRAINING = 1;  private static int FILTERING_TEST = 2;  private int m_state = IDLE;  protected Thread m_filterThread = null;  private transient Instances m_trainingSet;  private transient Instances m_testingSet;  /**   * Global info for the wrapped filter (if it exists).   */  protected String m_globalInfo;  /**   * Objects talking to us   */  private Hashtable m_listenees = new Hashtable();  /**   * Objects listening for training set events   */  private Vector m_trainingListeners = new Vector();  /**   * Objects listening for test set events   */  private Vector m_testListeners = new Vector();  /**   * Objects listening for instance events   */  private Vector m_instanceListeners = new Vector();  /**   * Objects listening for data set events   */  private Vector m_dataListeners = new Vector();  /**   * The filter to use.   */  private weka.filters.Filter m_Filter = new AllFilter();  /**   * Instance event object for passing on filtered instance streams   */  private InstanceEvent m_ie = new InstanceEvent(this);  private transient Logger m_log = null;    /**   * Global info (if it exists) for the wrapped filter   *   * @return the global info   */  public String globalInfo() {    return m_globalInfo;  }  public Filter() {    setLayout(new BorderLayout());    add(m_visual, BorderLayout.CENTER);    setFilter(m_Filter);  }  /**   * Set the filter to be wrapped by this bean   *   * @param c a <code>weka.filters.Filter</code> value   */  public void setFilter(weka.filters.Filter c) {    boolean loadImages = true;    if (c.getClass().getName().	compareTo(m_Filter.getClass().getName()) == 0) {      loadImages = false;    }    m_Filter = c;    String filterName = c.getClass().toString();    filterName = filterName.substring(filterName.				      indexOf('.')+1, 				      filterName.length());    if (loadImages) {      if (m_Filter instanceof Visible) {        m_visual = ((Visible) m_Filter).getVisual();      } else {        if (!m_visual.loadIcons(BeanVisual.ICON_PATH+filterName+".gif",                                BeanVisual.ICON_PATH+filterName+"_animated.gif")) {          useDefaultVisual();        }      }    }    m_visual.setText(filterName.substring(filterName.lastIndexOf('.')+1,					  filterName.length()));    if (m_Filter instanceof LogWriter && m_log != null) {      ((LogWriter) m_Filter).setLog(m_log);    }    if (!(m_Filter instanceof StreamableFilter) &&	(m_listenees.containsKey("instance"))) {      if (m_log != null) {	m_log.logMessage("WARNING : "+m_Filter.getClass().getName()			 +" is not an incremental filter");      }    }        // get global info    m_globalInfo = KnowledgeFlowApp.getGlobalInfo(m_Filter);  }  public weka.filters.Filter getFilter() {    return m_Filter;  }  /**   * Set the filter to be wrapped by this bean   *   * @param algorithm a weka.filters.Filter   * @exception IllegalArgumentException if an error occurs   */  public void setWrappedAlgorithm(Object algorithm) {        if (!(algorithm instanceof weka.filters.Filter)) {       throw new IllegalArgumentException(algorithm.getClass()+" : incorrect "					 +"type of algorithm (Filter)");    }    setFilter((weka.filters.Filter)algorithm);  }  /**   * Get the filter wrapped by this bean   *   * @return an <code>Object</code> value   */  public Object getWrappedAlgorithm() {    return getFilter();  }  /**   * Accept a training set   *   * @param e a <code>TrainingSetEvent</code> value   */  public void acceptTrainingSet(TrainingSetEvent e) {    processTrainingOrDataSourceEvents(e);  }  private boolean m_structurePassedOn = false;  /**   * Accept an instance for processing by StreamableFilters only   *   * @param e an <code>InstanceEvent</code> value   */  public void acceptInstance(InstanceEvent e) {    // to do!    if (m_filterThread != null) {      String messg = "Filter is currently batch processing!";      if (m_log != null) {	m_log.logMessage(messg);      } else {	System.err.println(messg);      }      return;    }    if (!(m_Filter instanceof StreamableFilter)) {      if (m_log != null) {	m_log.logMessage("ERROR : "+m_Filter.getClass().getName()			 +"can't process streamed instances; can't continue");      }      return;    }    if (e.getStatus() == InstanceEvent.FORMAT_AVAILABLE) {      try {        //notifyInstanceListeners(e);	//	Instances dataset = e.getInstance().dataset();	Instances dataset = e.getStructure();	if (m_Filter instanceof SupervisedFilter) {	  // defualt to last column if no class is set	  if (dataset.classIndex() < 0) {	    dataset.setClassIndex(dataset.numAttributes()-1);	  }	}	// initialize filter	m_Filter.setInputFormat(dataset);	// attempt to determine post-filtering	// structure. If successful this can be passed on to instance	// listeners as a new FORMAT_AVAILABLE event.	m_structurePassedOn = false;	try {	  if (m_Filter.isOutputFormatDefined()) {	    //	    System.err.println(m_Filter.getOutputFormat());	    m_ie.setStructure(m_Filter.getOutputFormat());	    notifyInstanceListeners(m_ie);	    m_structurePassedOn = true;	  }	} catch (Exception ex) {	  System.err.println("Error in obtaining post-filter structure: Filter.java");	}      } catch (Exception ex) {	ex.printStackTrace();      }      return;    }       // pass instance through the filter    try {      if (!m_Filter.input(e.getInstance())) {	if (m_log != null) {	  m_log.logMessage("ERROR : filter not ready to output instance");	}	return;      }            // collect output instance.      Instance filteredInstance = m_Filter.output();      if (filteredInstance == null) {	return;      }      if (!m_structurePassedOn) {	// pass on the new structure first	m_ie.setStructure(new Instances(filteredInstance.dataset(), 0));	notifyInstanceListeners(m_ie);	m_structurePassedOn = true;      }      m_ie.setInstance(filteredInstance);      m_ie.setStatus(e.getStatus());      notifyInstanceListeners(m_ie);    } catch (Exception ex) {      if (m_log != null) {	m_log.logMessage(ex.toString());      }      ex.printStackTrace();    }  }  private void processTrainingOrDataSourceEvents(final EventObject e) {    boolean structureOnly = false;    if (e instanceof DataSetEvent) {      structureOnly = ((DataSetEvent)e).isStructureOnly();      if(structureOnly){       notifyDataOrTrainingListeners(e);        }    }    if (e instanceof TrainingSetEvent) {      structureOnly = ((TrainingSetEvent)e).isStructureOnly();      if(structureOnly){       notifyDataOrTrainingListeners(e);        }    }    if (structureOnly && !(m_Filter instanceof StreamableFilter)) {      return; // nothing can be done    }        if (m_filterThread == null) {      try {	if (m_state == IDLE) {	  synchronized (this) {	    m_state = FILTERING_TRAINING;	  }	  m_trainingSet = (e instanceof TrainingSetEvent) 	    ? ((TrainingSetEvent)e).getTrainingSet()	    : ((DataSetEvent)e).getDataSet();	  final String oldText = m_visual.getText();	  m_filterThread = new Thread() {	      public void run() {		try {		  if (m_trainingSet != null) {		    m_visual.setAnimated();		    m_visual.setText("Filtering training data...");		    if (m_log != null) {		      m_log.statusMessage("Filter : filtering training data ("					  +m_trainingSet.relationName());		    }		    m_Filter.setInputFormat(m_trainingSet);		    Instances filteredData = 		      weka.filters.Filter.useFilter(m_trainingSet, m_Filter);		    m_visual.setText(oldText);		    m_visual.setStatic();		    EventObject ne;		    if (e instanceof TrainingSetEvent) {		      ne = new TrainingSetEvent(weka.gui.beans.Filter.this, 						filteredData);		      ((TrainingSetEvent)ne).m_setNumber =			((TrainingSetEvent)e).m_setNumber;		      ((TrainingSetEvent)ne).m_maxSetNumber = 			((TrainingSetEvent)e).m_maxSetNumber;		    } else {		      ne = new DataSetEvent(weka.gui.beans.Filter.this,					    filteredData);		    }		    notifyDataOrTrainingListeners(ne);		  }		} catch (Exception ex) {		  ex.printStackTrace();		} finally {		  m_visual.setText(oldText);		  m_visual.setStatic();		  m_state = IDLE;		  if (isInterrupted()) {		    m_trainingSet = null;		    if (m_log != null) {		      m_log.logMessage("Filter training set interrupted!");		      m_log.statusMessage("OK");		    }		  }		  block(false);		}	      }	    };	  m_filterThread.setPriority(Thread.MIN_PRIORITY);	  m_filterThread.start();	  block(true);	  m_filterThread = null;	  m_state = IDLE;	}      } catch (Exception ex) {	ex.printStackTrace();      }    }  }  /**   * Accept a test set   *   * @param e a <code>TestSetEvent</code> value   */  public void acceptTestSet(final TestSetEvent e) {      if(e.isStructureOnly())            notifyTestListeners(e);      if (m_trainingSet != null && 	m_trainingSet.equalHeaders(e.getTestSet()) && 	m_filterThread == null) {      try {	if (m_state == IDLE) {	  m_state = FILTERING_TEST;	}	m_testingSet = e.getTestSet();	final String oldText = m_visual.getText();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -