Log in Help
Print
Homereleasesgate-5.1-beta2-build3402-ALLpluginsMachine_Learningsrcgatecreolemlmaxent 〉 TestMaxentWrapper.java
 
/*
 *  TestMaxentWrapper.java
 *
 *  Copyright (c) 1998-2005, The University of Sheffield.
 *
 *  This file is part of GATE (see http://gate.ac.uk/), and is free
 *  software, licenced under the GNU Library General Public License,
 *  Version 2, June 1991 (in the distribution as file licence.html,
 *  and also available at http://gate.ac.uk/gate/licence.html).
 *
 *  Mike Dowman, 1/4/2004
 *
 *  $Id: TestMaxentWrapper.java 7455 2006-06-19 11:18:44 +0000 (Mon, 19 Jun 2006) ian_roberts $
 */

package gate.creole.ml.maxent;

import junit.framework.*;
import gate.*;
import gate.corpora.*;
import java.io.File;
import java.net.*;
import gate.gui.MainFrame;
import gate.util.Files;
import gate.util.GateRuntimeException;

public class TestMaxentWrapper extends TestCase {

  private static final boolean DEBUG=false;

  public TestMaxentWrapper(String name) {
    super(name);
  }

  /**
   * Flag to ensure Gate.init is only called once.
   */
  private static boolean gateInited = false;
  
  private static synchronized void initGate() throws Exception {
    if(!gateInited) {
      File gateHome = new File(System.getProperty("gate.home.location"));
      Gate.setGateHome(gateHome);
      Gate.init();

      File anniePlugin = new File(System.getProperty("annie.plugin"));
      Gate.getCreoleRegister().registerDirectories(anniePlugin.toURL());
      File mlPlugin = new File(System.getProperty("machinelearning.plugin"));
      Gate.getCreoleRegister().registerDirectories(mlPlugin.toURL());
      gateInited = true;
    }
  }
  
  /** Fixture set up - init GATE*/
  public void setUp() throws Exception {
    initGate();
  }

  /** Fixture tear down - does nothing */
  public void tearDown() throws Exception {
  } // tearDown

  /** Tests the MAXENT machine learning wrapper, by training it to identify
   * lookup annotations based on the precence of lookup annotations.
   */
  public void testMaxentWrapper() throws Exception {
    // Store the original standard output stream, so we can restore it later.
    java.io.PrintStream normalOutputStream=System.out;

    // Display the gui for debugging purposes.
         if (DEBUG) {
      MainFrame mainFrame = new MainFrame();
      mainFrame.setVisible(true);
    } else {
      // We don't want the output displayed unless we are debugging, so set the
      // standard output stream to a new one that never outputs anything.
      System.setOut(new java.io.PrintStream(
          new java.io.OutputStream() {
        public void write(int b) { }
        public void write(byte[] b, int off, int len) { }
      }));
    }

    //get a document - take it from the gate server.
    // tests/doc0.html is a simple html document.
    Document doc = Factory.newDocument(
      new URL(TestDocument.getTestServerName() + "tests/doc0.html")
    );

    // Get a tokeniser - just use all the default settings.
    LanguageAnalyser tokeniser=
        (LanguageAnalyser) Factory.createResource(
        "gate.creole.tokeniser.DefaultTokeniser");

    // Get a default gazetteer, again just use all the default settings
    LanguageAnalyser gazetteerInst =
        (LanguageAnalyser) Factory.createResource(
        "gate.creole.gazetteer.DefaultGazetteer");

    // Create the Maxent ML Processing resource.
    // First set up the parameters
    FeatureMap maxentParameters = Factory.newFeatureMap();
    maxentParameters.put("configFileURL", Files.getGateResource( 
                                 "/gate.ac.uk/tests/TestMaxentConfigFile.xml"));
    // Then actually make the PR
    LanguageAnalyser maxentPR =
        (LanguageAnalyser)
        Factory.createResource("gate.creole.ml.MachineLearningPR",
                               maxentParameters);

    // runtime stuff - set the document to be used with the gazetteer,the
    // tokeniser and the ML PR to doc, and run each of them in turn.
    tokeniser.setDocument(doc);
    tokeniser.execute();
    gazetteerInst.setDocument(doc);
    gazetteerInst.execute();
    maxentPR.setDocument(doc);
    maxentPR.execute();

    // Now run the trained maxent model.
    maxentPR.setParameterValue("training", Boolean.FALSE);
    maxentPR.execute();

    // Now clean up so we don't get a memory leak.
    Factory.deleteResource(doc);
    Factory.deleteResource(tokeniser);
    Factory.deleteResource(maxentPR);
    Factory.deleteResource(gazetteerInst);

    // Restore the standard output stream.
    System.setOut(normalOutputStream);
  } // TestMaxentWrapper

  /** Test suite routine for the test runner */
  public static Test suite() {
    return new TestSuite(TestMaxentWrapper.class);
  } // suite

  // The main class allows this class to be tested on its own, without the
  // need to call it from another class.
  public static void main(String[] args) {
    try{
      Gate.init();
      TestMaxentWrapper testMax = new TestMaxentWrapper("");
      testMax.setUp();
      testMax.testMaxentWrapper();
      testMax.tearDown();
    } catch(Exception e) {
      e.printStackTrace();
    }
  } // main

} // TestFlexibleGazetteer