/*
* TestLearningAPI.java
*
* Yaoyong Li 08/10/2007
*
* $Id: TestAnnotationMergingPlugin.java, v 1.0 2007-10-08 11:44:16 +0000 yaoyong $
*/
package gate.merger.test;
import gate.Annotation;
import gate.AnnotationSet;
import gate.Corpus;
import gate.Document;
import gate.Factory;
import gate.Gate;
import gate.GateConstants;
import gate.merger.AnnotationMergingMain;
import gate.merger.MergingMethodsEnum;
import gate.util.ExtensionFileFilter;
import gate.util.GateException;
import java.io.File;
import java.net.MalformedURLException;
import java.util.Arrays;
import java.util.Comparator;
import junit.framework.TestCase;
public class TestAnnotationMergingPlugin extends TestCase {
private static File learningHome;
/** Use it to do initialisation only once. */
private static boolean initialized = false;
/**
* Construction
*
* @throws GateException
* @throws MalformedURLException
*/
public TestAnnotationMergingPlugin(String name) throws GateException,
MalformedURLException {
super(name);
if(!initialized) {
Gate.init();
learningHome = new File(new File(Gate.getGateHome(), "plugins"),
"Annotation_Merging");
Gate.getCreoleRegister().addDirectory(learningHome.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 {
super.tearDown();
} // tearDown
/** The test for AnnotationMerging. */
public void testAnnotationMergingPlugin() 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);
//Create a object for merging
AnnotationMergingMain mergerOne = (AnnotationMergingMain)Factory
.createResource("gate.merger.AnnotationMergingMain");
//A corpus
Corpus corpus = Factory.newCorpus("DataSet");
ExtensionFileFilter fileFilter = new ExtensionFileFilter();
fileFilter.addExtension("xml");
String corpusDirName = new File(learningHome, "testdata").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());
corpus.add(doc);
}
}
gate.creole.SerialAnalyserController controller;
controller = (gate.creole.SerialAnalyserController)Factory
.createResource("gate.creole.SerialAnalyserController");
controller.setCorpus(corpus);
controller.add(mergerOne);
mergerOne.setAnnSetOutput("mergerAnns");
mergerOne.setAnnSetsForMerging("ann1;ann2;ann3");
mergerOne.setAnnTypesAndFeats("sent->Op;Os");
MergingMethodsEnum methodMerger = MergingMethodsEnum.MajorityVoting;
mergerOne.setMergingMethod(methodMerger);
controller.execute();
Document doc = (Document)corpus.get(0);
AnnotationSet anns = doc.getAnnotations("mergerAnns").get("sent");
int num = obtainAnns(anns, "Op", "true");
assertEquals(num, 5);
anns = doc.getAnnotations("mergerAnns").get("Os");
num = anns.size();
assertEquals(num, 2);
doc.removeAnnotationSet("mergerAnns");
methodMerger = MergingMethodsEnum.MergingByAnnotatorNum;
mergerOne.setMergingMethod(methodMerger);
mergerOne.setMinimalAnnNum("3");
controller.execute();
doc = (Document)corpus.get(0);
anns = doc.getAnnotations("mergerAnns").get("sent");
num = obtainAnns(anns, "Op", "true");
assertEquals(num, 4);
anns = doc.getAnnotations("mergerAnns").get("Os");
num = anns.size();
assertEquals(num, 2);
System.out.println("completed");
corpus.clear();
Factory.deleteResource(corpus);
Factory.deleteResource(mergerOne);
controller.remove(mergerOne);
controller.cleanup();
Factory.deleteResource(controller);
// finally {
Gate.getUserConfig().put(
GateConstants.DOCUMENT_ADD_SPACE_ON_UNPACK_FEATURE_NAME,
savedSpaceSetting);
// }
}
private int obtainAnns(AnnotationSet anns, String f, String v) {
int num = 0;
for(Annotation ann : anns) {
if(ann.getFeatures().containsKey(f) && ann.getFeatures().get(f).equals(v))
++num;
}
return num;
}
}