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

📄 filter.java

📁 wekaUT是 university texas austin 开发的基于weka的半指导学习(semi supervised learning)的分类器
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    return result;  }    /**   * Output an instance after filtering but do not remove from the   * output queue.   *   * @return the instance that has most recently been filtered (or null if   * the queue is empty).   * @exception NullPointerException if no input structure has been defined    */  public Instance outputPeek() {    if (m_OutputFormat == null) {      throw new NullPointerException("No output instance format defined");    }    if (m_OutputQueue.empty()) {      return null;    }    Instance result = (Instance)m_OutputQueue.peek();    return result;  }  /**   * Returns the number of instances pending output   *   * @return the number of instances  pending output   * @exception NullPointerException if no input structure has been defined   */  public int numPendingOutput() {    if (m_OutputFormat == null) {      throw new NullPointerException("No output instance format defined");    }    return m_OutputQueue.size();  }  /**   * Returns whether the output format is ready to be collected   *   * @return true if the output format is set   */  public boolean isOutputFormatDefined() {    return (m_OutputFormat != null);  }  /**   * Gets an array containing the indices of all string attributes.   *   * @param insts the Instances to scan for string attributes.    * @return an array containing the indices of string attributes in   * the input structure. Will be zero-length if there are no   * string attributes   */  protected int [] getStringIndices(Instances insts) {        // Scan through getting the indices of String attributes    int [] index = new int [insts.numAttributes()];    int indexSize = 0;    for (int i = 0; i < insts.numAttributes(); i++) {      if (insts.attribute(i).type() == Attribute.STRING) {        index[indexSize++] = i;      }    }    int [] result = new int [indexSize];    System.arraycopy(index, 0, result, 0, indexSize);    return result;  }    /**   * Filters an entire set of instances through a filter and returns   * the new set.    *   * @param data the data to be filtered   * @param filter the filter to be used   * @return the filtered set of data   * @exception Exception if the filter can't be used successfully   */  public static Instances useFilter(Instances data,				    Filter filter) throws Exception {    /*    System.err.println(filter.getClass().getName()                        + " in:" + data.numInstances());    */    for (int i = 0; i < data.numInstances(); i++) {      filter.input(data.instance(i));    }    filter.batchFinished();    Instances newData = filter.getOutputFormat();    Instance processed;    while ((processed = filter.output()) != null) {      newData.add(processed);    }    /*    System.err.println(filter.getClass().getName()                        + " out:" + newData.numInstances());    */    return newData;  }  /**   * Method for testing filters.   *   * @param argv should contain the following arguments: <br>   * -i input_file <br>   * -o output_file <br>   * -c class_index <br>   * or -h for help on options   * @exception Exception if something goes wrong or the user requests help on   * command options   */  public static void filterFile(Filter filter, String [] options)     throws Exception {    boolean debug = false;    Instances data = null;    Reader input = null;    PrintWriter output = null;    boolean helpRequest;    try {       helpRequest = Utils.getFlag('h', options);      if (Utils.getFlag('d', options)) {	debug = true;      }      String infileName = Utils.getOption('i', options);      String outfileName = Utils.getOption('o', options);       String classIndex = Utils.getOption('c', options);            if (filter instanceof OptionHandler) {	((OptionHandler)filter).setOptions(options);      }      Utils.checkForRemainingOptions(options);      if (helpRequest) {	throw new Exception("Help requested.\n");      }      if (infileName.length() != 0) {	input = new BufferedReader(new FileReader(infileName));      } else {	input = new BufferedReader(new InputStreamReader(System.in));      }      if (outfileName.length() != 0) {	output = new PrintWriter(new FileOutputStream(outfileName));      } else { 	output = new PrintWriter(System.out);      }      data = new Instances(input, 1);      if (classIndex.length() != 0) {	if (classIndex.equals("first")) {	  data.setClassIndex(0);	} else if (classIndex.equals("last")) {	  data.setClassIndex(data.numAttributes() - 1);	} else {	  data.setClassIndex(Integer.parseInt(classIndex) - 1);	}      }    } catch (Exception ex) {      String filterOptions = "";      // Output the error and also the valid options      if (filter instanceof OptionHandler) {	filterOptions += "\nFilter options:\n\n";	Enumeration enum = ((OptionHandler)filter).listOptions();	while (enum.hasMoreElements()) {	  Option option = (Option) enum.nextElement();	  filterOptions += option.synopsis() + '\n'	    + option.description() + "\n";	}      }      String genericOptions = "\nGeneral options:\n\n"	+ "-h\n"	+ "\tGet help on available options.\n"	+ "\t(use -b -h for help on batch mode.)\n"	+ "-i <file>\n"	+ "\tThe name of the file containing input instances.\n"	+ "\tIf not supplied then instances will be read from stdin.\n"	+ "-o <file>\n"	+ "\tThe name of the file output instances will be written to.\n"	+ "\tIf not supplied then instances will be written to stdout.\n"	+ "-c <class index>\n"	+ "\tThe number of the attribute to use as the class.\n"	+ "\t\"first\" and \"last\" are also valid entries.\n"	+ "\tIf not supplied then no class is assigned.\n";      throw new Exception('\n' + ex.getMessage()			  + filterOptions+genericOptions);    }        if (debug) {      System.err.println("Setting input format");    }    boolean printedHeader = false;    if (filter.setInputFormat(data)) {      if (debug) {	System.err.println("Getting output format");      }      output.println(filter.getOutputFormat().toString());      printedHeader = true;    }        // Pass all the instances to the filter    while (data.readInstance(input)) {      if (debug) {	System.err.println("Input instance to filter");      }      if (filter.input(data.instance(0))) {	if (debug) {	  System.err.println("Filter said collect immediately");	}	if (!printedHeader) {	  throw new Error("Filter didn't return true from setInputFormat() "			  + "earlier!");	}	if (debug) {	  System.err.println("Getting output instance");	}	output.println(filter.output().toString());      }      data.delete(0);    }        // Say that input has finished, and print any pending output instances    if (debug) {      System.err.println("Setting end of batch");    }    if (filter.batchFinished()) {      if (debug) {	System.err.println("Filter said collect output");      }      if (!printedHeader) {	if (debug) {	  System.err.println("Getting output format");	}	output.println(filter.getOutputFormat().toString());      }      if (debug) {	System.err.println("Getting output instance");      }      while (filter.numPendingOutput() > 0) {	output.println(filter.output().toString());	if (debug){	  System.err.println("Getting output instance");	}      }    }    if (debug) {      System.err.println("Done");    }        if (output != null) {      output.close();    }  }  /**   * Method for testing filters ability to process multiple batches.   *   * @param argv should contain the following arguments:<br>   * -i (first) input file <br>   * -o (first) output file <br>   * -r (second) input file <br>   * -s (second) output file <br>   * -c class_index <br>   * or -h for help on options   * @exception Exception if something goes wrong or the user requests help on   * command options   */  public static void batchFilterFile(Filter filter, String [] options)     throws Exception {    Instances firstData = null;    Instances secondData = null;    Reader firstInput = null;    Reader secondInput = null;    PrintWriter firstOutput = null;    PrintWriter secondOutput = null;    boolean helpRequest;    try {      helpRequest = Utils.getFlag('h', options);      String fileName = Utils.getOption('i', options);       if (fileName.length() != 0) {	firstInput = new BufferedReader(new FileReader(fileName));      } else {	throw new Exception("No first input file given.\n");      }      fileName = Utils.getOption('r', options);       if (fileName.length() != 0) {	secondInput = new BufferedReader(new FileReader(fileName));      } else {	throw new Exception("No second input file given.\n");      }      fileName = Utils.getOption('o', options);       if (fileName.length() != 0) {	firstOutput = new PrintWriter(new FileOutputStream(fileName));      } else {	firstOutput = new PrintWriter(System.out);      }            fileName = Utils.getOption('s', options);       if (fileName.length() != 0) {	secondOutput = new PrintWriter(new FileOutputStream(fileName));      } else {	secondOutput = new PrintWriter(System.out);      }      String classIndex = Utils.getOption('c', options);      if (filter instanceof OptionHandler) {	((OptionHandler)filter).setOptions(options);      }      Utils.checkForRemainingOptions(options);            if (helpRequest) {	throw new Exception("Help requested.\n");      }      firstData = new Instances(firstInput, 1);      secondData = new Instances(secondInput, 1);      if (!secondData.equalHeaders(firstData)) {	throw new Exception("Input file formats differ.\n");      }      if (classIndex.length() != 0) {	if (classIndex.equals("first")) {	  firstData.setClassIndex(0);	  secondData.setClassIndex(0);	} else if (classIndex.equals("last")) {	  firstData.setClassIndex(firstData.numAttributes() - 1);	  secondData.setClassIndex(secondData.numAttributes() - 1);	} else {	  firstData.setClassIndex(Integer.parseInt(classIndex) - 1);	  secondData.setClassIndex(Integer.parseInt(classIndex) - 1);	}      }    } catch (Exception ex) {      String filterOptions = "";      // Output the error and also the valid options      if (filter instanceof OptionHandler) {	filterOptions += "\nFilter options:\n\n";	Enumeration enum = ((OptionHandler)filter).listOptions();	while (enum.hasMoreElements()) {	  Option option = (Option) enum.nextElement();	  filterOptions += option.synopsis() + '\n'	    + option.description() + "\n";	}      }      String genericOptions = "\nGeneral options:\n\n"	+ "-h\n"	+ "\tGet help on available options.\n"	+ "-i <filename>\n"	+ "\tThe file containing first input instances.\n"	+ "-o <filename>\n"	+ "\tThe file first output instances will be written to.\n"	+ "-r <filename>\n"	+ "\tThe file containing second input instances.\n"	+ "-s <filename>\n"	+ "\tThe file second output instances will be written to.\n"	+ "-c <class index>\n"	+ "\tThe number of the attribute to use as the class.\n"	+ "\t\"first\" and \"last\" are also valid entries.\n"	+ "\tIf not supplied then no class is assigned.\n";      throw new Exception('\n' + ex.getMessage()			  + filterOptions+genericOptions);    }    boolean printedHeader = false;    if (filter.setInputFormat(firstData)) {      firstOutput.println(filter.getOutputFormat().toString());      printedHeader = true;    }        // Pass all the instances to the filter    while (firstData.readInstance(firstInput)) {      if (filter.input(firstData.instance(0))) {	if (!printedHeader) {	  throw new Error("Filter didn't return true from setInputFormat() "			  + "earlier!");	}	firstOutput.println(filter.output().toString());      }      firstData.delete(0);    }        // Say that input has finished, and print any pending output instances    if (filter.batchFinished()) {      if (!printedHeader) {	firstOutput.println(filter.getOutputFormat().toString());      }      while (filter.numPendingOutput() > 0) {	firstOutput.println(filter.output().toString());      }    }        if (firstOutput != null) {      firstOutput.close();    }        printedHeader = false;    if (filter.isOutputFormatDefined()) {      secondOutput.println(filter.getOutputFormat().toString());      printedHeader = true;    }    // Pass all the second instances to the filter    while (secondData.readInstance(secondInput)) {      if (filter.input(secondData.instance(0))) {	if (!printedHeader) {	  throw new Error("Filter didn't return true from"			  + " isOutputFormatDefined() earlier!");	}	secondOutput.println(filter.output().toString());      }      secondData.delete(0);    }        // Say that input has finished, and print any pending output instances    if (filter.batchFinished()) {      if (!printedHeader) {	secondOutput.println(filter.getOutputFormat().toString());      }      while (filter.numPendingOutput() > 0) {	secondOutput.println(filter.output().toString());      }    }    if (secondOutput != null) {      secondOutput.close();    }  }  /**   * Main method for testing this class.   *   * @param argv should contain arguments to the filter: use -h for help   */  public static void main(String [] args) {        try {      if (args.length == 0) {        throw new Exception("First argument must be the class name of a Filter");      }      String fname = args[0];      Filter f = (Filter)Class.forName(fname).newInstance();      args[0] = "";      if (Utils.getFlag('b', args)) {	Filter.batchFilterFile(f, args);      } else {	Filter.filterFile(f, args);      }    } catch (Exception ex) {      ex.printStackTrace();      System.out.println(ex.getMessage());    }  }}

⌨️ 快捷键说明

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