/* * TestIaaPlugin.java * * Yaoyong Li 15/07/2008 * * $Id: TestIaaPlugin.java, v 1.0 2008-07-15 12:58:16 +0000 yaoyong $ */ package gate.iaaplugin.test; import java.io.File; import java.net.MalformedURLException; import java.util.Arrays; import java.util.Comparator; import gate.Corpus; import gate.Document; import gate.Factory; import gate.FeatureMap; import gate.Gate; import gate.GateConstants; import gate.iaaplugin.IaaMain; import gate.util.ExtensionFileFilter; import gate.util.GateException; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; import gate.iaaplugin.MeasureType; /** * Test the IAA computation by using the test * methods and small dataset. */ public class TestIaaPlugin extends TestCase { /** Use it to do initialisation only once. */ private static boolean initialized = false; /** Learning home for reading the data and configuration file. */ private static File iaaPluginHome; /** Constructor, setting the home directory. */ public TestIaaPlugin(String arg0) throws GateException, MalformedURLException { super(arg0); if(!initialized) { Gate.init(); iaaPluginHome = new File(new File(Gate.getGateHome(), "plugins"), "Inter_Annotator_Agreement"); Gate.getCreoleRegister().addDirectory(iaaPluginHome.toURL()); initialized = true; } } /** Fixture set up */ public void setUp() { } // setUp /** * Put things back as they should be after running tests. */ public void tearDown() throws Exception { } // tearDown /** Test suite routine for the test runner */ public static Test suite() { return new TestSuite(TestIaaPlugin.class); } // suite /** The test the IAA. */ public void testIaaPlugin() throws Exception { Boolean savedSpaceSetting = Gate.getUserConfig().getBoolean( GateConstants.DOCUMENT_ADD_SPACE_ON_UNPACK_FEATURE_NAME); Gate.getUserConfig().put( GateConstants.DOCUMENT_ADD_SPACE_ON_UNPACK_FEATURE_NAME, Boolean.FALSE); try { //Gate.setGateHome(new File("C:\\svn\\gate")); //Gate.setUserConfigFile(new File("C:\\svn\\gate.xml")); //Gate.init(); //ExtensionFileFilter fileFilter = new ExtensionFileFilter(); //fileFilter.addExtension("xml"); //iaaPluginHome = new File(new File(Gate.getGateHome(), "plugins"), //"iaaPlugin"); //Gate.getCreoleRegister().addDirectory(iaaPluginHome.toURL()); // Load the documents into a corpus Corpus data = Factory.newCorpus("data"); ExtensionFileFilter fileFilter = new ExtensionFileFilter(); fileFilter.addExtension("xml"); data.populate(new File(iaaPluginHome, "test").toURI().toURL(), fileFilter, "UTF-8", false); /*String corpusDirName = new File(iaaPluginHome, "test") .getAbsolutePath(); File[] xmlFiles = new File(corpusDirName).listFiles(fileFilter); Arrays.sort(xmlFiles, new Comparator<File>() { public int compare(File a, File b) { return a.getName().compareTo(b.getName()); } }); for(File f : xmlFiles) { if(!f.isDirectory()) { Document doc = Factory.newDocument(f.toURI().toURL(), "UTF-8"); doc.setName(f.getName()); data.add(doc); } }*/ //String testDir = "plugins/iaaPlugin/test/"; //System.out.println("testDir00=*"+(new File(testDir,"beijing-opera.xml")).getAbsolutePath().toString()+"*"); /*Document doc = Factory.newDocument(new File("C:\\svn\\gate\\plugins\\iaaPlugin\\test\\beijing-opera.xml").toURL(), "UTF-8"); Document doc1 = Factory.newDocument(new File("C:\\svn\\gate\\plugins\\iaaPlugin\\test\\beijing-opera-2.xml").toURL(), "UTF-8"); data.add(doc); data.add(doc1);*/ IaaMain iaaM; FeatureMap parameters = Factory.newFeatureMap(); iaaM = (IaaMain)Factory.createResource( "gate.iaaplugin.IaaMain", parameters); iaaM.setAnnSetsForIaa("ann1;ann2;ann3"); iaaM.setAnnTypesAndFeats("Os;sent->Op"); iaaM.setVerbosity("0"); /** The controller include the ML Api as one PR. */ gate.creole.SerialAnalyserController controller = (gate.creole.SerialAnalyserController)Factory .createResource("gate.creole.SerialAnalyserController"); controller.setCorpus(data); controller.add(iaaM); controller.execute(); int[] nPwF = new int[4]; nPwF[0] = (int)Math.ceil((double)iaaM.fMeasureOverallTypes.correct*100); nPwF[1] = (int)Math.ceil((double)iaaM.fMeasureOverallTypes.partialCor*100); nPwF[2] = (int)Math.ceil((double)iaaM.fMeasureOverallTypes.spurious*100); nPwF[3] = (int)Math.ceil((double)iaaM.fMeasureOverallTypes.missing*100); assertEquals("Wrong value for correct: ", nPwF[0], 425); assertEquals("Wrong value for correct: ", nPwF[1], 50); assertEquals("Wrong value for correct: ", nPwF[2], 167); assertEquals("Wrong value for correct: ", nPwF[3], 234); //test f-measure on named entity recognition iaaM.setAnnTypesAndFeats("Os"); iaaM.setVerbosity("0"); controller.execute(); nPwF[0] = (int)Math.ceil((double)iaaM.fMeasureOverallTypes.correct*100); nPwF[1] = (int)Math.ceil((double)iaaM.fMeasureOverallTypes.partialCor*100); nPwF[2] = (int)Math.ceil((double)iaaM.fMeasureOverallTypes.spurious*100); nPwF[3] = (int)Math.ceil((double)iaaM.fMeasureOverallTypes.missing*100); assertEquals("Wrong value for correct: ", nPwF[0], 167); assertEquals("Wrong value for correct: ", nPwF[1], 100); assertEquals("Wrong value for correct: ", nPwF[2], 117); assertEquals("Wrong value for correct: ", nPwF[3], 150); //Test kappa on sentence classification iaaM.setAnnTypesAndFeats("sent->Op"); iaaM.setVerbosity("0"); MeasureType pt = MeasureType.AGREEMENTANDKAPPA; iaaM.setMeasureType(pt); controller.execute(); nPwF[0] = (int)Math.ceil((double)iaaM.overallTypesPairs[0]*1000); nPwF[1] = (int)Math.ceil((double)iaaM.overallTypesPairs[1]*1000); nPwF[2] = (int)Math.ceil((double)iaaM.overallTypesPairs[2]*1000); assertEquals("Wrong value for correct: ", nPwF[0], 847); assertEquals("Wrong value for correct: ", nPwF[1], 761); assertEquals("Wrong value for correct: ", nPwF[2], 759); } finally { Gate.getUserConfig().put( GateConstants.DOCUMENT_ADD_SPACE_ON_UNPACK_FEATURE_NAME, savedSpaceSetting); } } /** The test the IAA using BDM. */ public void testIaaBDM() throws Exception { Boolean savedSpaceSetting = Gate.getUserConfig().getBoolean( GateConstants.DOCUMENT_ADD_SPACE_ON_UNPACK_FEATURE_NAME); Gate.getUserConfig().put( GateConstants.DOCUMENT_ADD_SPACE_ON_UNPACK_FEATURE_NAME, Boolean.FALSE); try { // Load the documents into a corpus Corpus data = Factory.newCorpus("data"); ExtensionFileFilter fileFilter = new ExtensionFileFilter(); fileFilter.addExtension("xml"); File testDir = new File(new File(iaaPluginHome, "test"), "ontoData"); data.populate(testDir.toURI().toURL(), fileFilter, "UTF-8", false); //String testDir = "plugins/iaaPlugin/test/"; //System.out.println("testDir00=*"+(new File(testDir,"beijing-opera.xml")).getAbsolutePath().toString()+"*"); /*Document doc = Factory.newDocument(new File("C:\\svn\\gate\\plugins\\iaaPlugin\\test\\beijing-opera.xml").toURL(), "UTF-8"); Document doc1 = Factory.newDocument(new File("C:\\svn\\gate\\plugins\\iaaPlugin\\test\\beijing-opera-2.xml").toURL(), "UTF-8"); data.add(doc); data.add(doc1);*/ IaaMain iaaM; FeatureMap parameters = Factory.newFeatureMap(); iaaM = (IaaMain)Factory.createResource( "gate.iaaplugin.IaaMain", parameters); iaaM.setAnnSetsForIaa("Key;Response"); iaaM.setAnnTypesAndFeats("Mention->class"); iaaM.setVerbosity("0"); iaaM.setBdmScoreFile(new File(testDir, "protonU-bdm.txt").toURI().toURL()); /** The controller include the ML Api as one PR. */ gate.creole.SerialAnalyserController controller = (gate.creole.SerialAnalyserController)Factory .createResource("gate.creole.SerialAnalyserController"); controller.setCorpus(data); controller.add(iaaM); controller.execute(); int[] nPwF = new int[4]; nPwF[0] = (int)Math.ceil((double)iaaM.fMeasureOverallTypesBDM.correct*100); nPwF[1] = (int)Math.ceil((double)iaaM.fMeasureOverallTypesBDM.partialCor*100); nPwF[2] = (int)Math.ceil((double)iaaM.fMeasureOverallTypesBDM.spurious*100); nPwF[3] = (int)Math.ceil((double)iaaM.fMeasureOverallTypesBDM.missing*100); assertEquals("Wrong value for correct: ", nPwF[0], 764); assertEquals("Wrong value for correct: ", nPwF[1], 0); assertEquals("Wrong value for correct: ", nPwF[2], 1050); assertEquals("Wrong value for correct: ", nPwF[3], 5600); } finally { Gate.getUserConfig().put( GateConstants.DOCUMENT_ADD_SPACE_ON_UNPACK_FEATURE_NAME, savedSpaceSetting); } } }