You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ctakes.apache.org by tm...@apache.org on 2013/05/11 14:06:44 UTC

svn commit: r1481308 - in /ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal: ae/EventEventRelationAnnotator.java eval/EvaluationOfEventEventRelations.java eval/EvaluationOfTemporalRelations_ImplBase.java

Author: tmill
Date: Sat May 11 12:06:44 2013
New Revision: 1481308

URL: http://svn.apache.org/r1481308
Log:
Uncommented classes and fixed to not depend on outside packages.

Modified:
    ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventEventRelationAnnotator.java
    ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/eval/EvaluationOfEventEventRelations.java
    ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/eval/EvaluationOfTemporalRelations_ImplBase.java

Modified: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventEventRelationAnnotator.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventEventRelationAnnotator.java?rev=1481308&r1=1481307&r2=1481308&view=diff
==============================================================================
--- ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventEventRelationAnnotator.java (original)
+++ ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventEventRelationAnnotator.java Sat May 11 12:06:44 2013
@@ -10,7 +10,6 @@ import org.apache.ctakes.relationextract
 import org.apache.ctakes.relationextractor.ae.features.PartOfSpeechFeaturesExtractor;
 import org.apache.ctakes.relationextractor.ae.features.RelationFeaturesExtractor;
 import org.apache.ctakes.relationextractor.ae.features.TokenFeaturesExtractor;
-import org.apache.ctakes.temporal.ae.feature.TemporalAttributeFeatureExtractor;
 import org.apache.ctakes.typesystem.type.relation.BinaryTextRelation;
 import org.apache.ctakes.typesystem.type.textsem.EventMention;
 import org.apache.ctakes.typesystem.type.textsem.IdentifiedAnnotation;

Modified: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/eval/EvaluationOfEventEventRelations.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/eval/EvaluationOfEventEventRelations.java?rev=1481308&r1=1481307&r2=1481308&view=diff
==============================================================================
--- ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/eval/EvaluationOfEventEventRelations.java (original)
+++ ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/eval/EvaluationOfEventEventRelations.java Sat May 11 12:06:44 2013
@@ -1,4 +1,4 @@
-/*package org.apache.ctakes.temporal.eval;
+package org.apache.ctakes.temporal.eval;
 
 import java.io.File;
 import java.net.URI;
@@ -9,14 +9,9 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.ctakes.relationextractor.eval.RelationExtractorEvaluation.HashableArguments;
+import org.apache.ctakes.relationextractor.eval.RelationExtractorEvaluation.ParameterSettings;
 import org.apache.ctakes.temporal.ae.EventEventRelationAnnotator;
-import org.apache.ctakes.temporal.ae.EventTimeRelationAnnotator;
-import org.apache.ctakes.temporal.ae.baselines.RecallBaselineEventTimeRelationAnnotator;
-import org.apache.ctakes.temporal.eval.EvaluationOfTemporalRelations.AddTransitiveContainsRelations;
-import org.apache.ctakes.temporal.eval.EvaluationOfTemporalRelations.ParameterSettings;
-import org.apache.ctakes.temporal.eval.EvaluationOfTemporalRelations.PreserveEventEventRelations;
 import org.apache.ctakes.temporal.eval.EvaluationOfTemporalRelations.RemoveCrossSentenceRelations;
-import org.apache.ctakes.temporal.eval.EvaluationOfTemporalRelations.RemoveEventEventRelations;
 import org.apache.ctakes.temporal.eval.EvaluationOfTemporalRelations.RemoveNonContainsRelations;
 import org.apache.ctakes.temporal.eval.EvaluationOfTemporalRelations.RemoveRelations;
 import org.apache.ctakes.typesystem.type.relation.BinaryTextRelation;
@@ -43,177 +38,170 @@ import com.google.common.collect.Sets;
 import com.lexicalscope.jewel.cli.CliFactory;
 
 public class EvaluationOfEventEventRelations extends
-		EvaluationOfTemporalRelations_ImplBase {
+EvaluationOfTemporalRelations_ImplBase {
 
-	public EvaluationOfEventEventRelations(      
-			  File baseDirectory,
-		      File rawTextDirectory,
-		      File knowtatorXMLDirectory,
-		      File xmiDirectory,
-		      File treebankDirectory,
-		      boolean useClosure,
-		      boolean printErrors,
-		      boolean printRelations,
-		      boolean baseline,
-		      String kernelParams,
-		      ParameterSettings params){
-		super(baseDirectory, rawTextDirectory, knowtatorXMLDirectory, xmiDirectory,
-				treebankDirectory, printErrors, printRelations, params);
-		
-	}
-
-	@Override
-	protected void train(CollectionReader collectionReader, File directory)
-			throws Exception {
-	    AggregateBuilder aggregateBuilder = this.getPreprocessorAggregateBuilder();
-	    aggregateBuilder.add(CopyFromGold.getDescription(EventMention.class, TimeMention.class, BinaryTextRelation.class));
-//	    aggregateBuilder.add(AnalysisEngineFactory.createPrimitiveDescription(MergeContainsOverlap.class));
-	    aggregateBuilder.add(AnalysisEngineFactory.createPrimitiveDescription(RemoveNonContainsRelations.class));
-	    aggregateBuilder.add(AnalysisEngineFactory.createPrimitiveDescription(RemoveCrossSentenceRelations.class));
-	    // TODO -- see if this applies to this relation:
-//	    if (this.useClosure) {
-//	      aggregateBuilder.add(AnalysisEngineFactory.createPrimitiveDescription(AddTransitiveContainsRelations.class));
-//	    }
-	    aggregateBuilder.add(AnalysisEngineFactory.createPrimitiveDescription(PreserveEventEventRelations.class));
-	    aggregateBuilder.add(EventEventRelationAnnotator.createDataWriterDescription(
-	                LIBSVMStringOutcomeDataWriter.class,
-//	        TKSVMlightStringOutcomeDataWriter.class,
-	        directory,
-	        params.probabilityOfKeepingANegativeExample));
-	    SimplePipeline.runPipeline(collectionReader, aggregateBuilder.createAggregate());
-
-	    HideOutput hider = new HideOutput();
-	    JarClassifierBuilder.trainAndPackage(directory,  "-t", "2", "-d", "2", "-c", "10");
-	    hider.restoreOutput();
-	    hider.close();
-	}
-
-	@Override
-	protected AnnotationStatistics<String> test(
-			CollectionReader collectionReader, File directory) throws Exception {
-	    AggregateBuilder aggregateBuilder = this.getPreprocessorAggregateBuilder();
-	    aggregateBuilder.add(CopyFromGold.getDescription(EventMention.class, TimeMention.class));
-//	    aggregateBuilder.add(AnalysisEngineFactory.createPrimitiveDescription(MergeContainsOverlap.class,
-//	    		MergeContainsOverlap.PARAM_RELATION_VIEW,
-//	    		GOLD_VIEW_NAME));
-	    aggregateBuilder.add(
-	        AnalysisEngineFactory.createPrimitiveDescription(RemoveNonContainsRelations.class,
-	        RemoveNonContainsRelations.PARAM_RELATION_VIEW,
-	        GOLD_VIEW_NAME));
-	    aggregateBuilder.add(AnalysisEngineFactory.createPrimitiveDescription(
-	        RemoveCrossSentenceRelations.class,
-	        RemoveCrossSentenceRelations.PARAM_SENTENCE_VIEW,
-	        CAS.NAME_DEFAULT_SOFA,
-	        RemoveCrossSentenceRelations.PARAM_RELATION_VIEW,
-	        GOLD_VIEW_NAME));
-	    // TODO - use if relevant.
-//	    if (this.useClosure) {
-//	      aggregateBuilder.add(
-//	          AnalysisEngineFactory.createPrimitiveDescription(AddTransitiveContainsRelations.class),
-//	          CAS.NAME_DEFAULT_SOFA,
-//	          GOLD_VIEW_NAME);
-//	    }
-	    aggregateBuilder.add(
-	        AnalysisEngineFactory.createPrimitiveDescription(PreserveEventEventRelations.class),
-	        CAS.NAME_DEFAULT_SOFA,
-	        GOLD_VIEW_NAME);
-	    		
-	    aggregateBuilder.add(AnalysisEngineFactory.createPrimitiveDescription(RemoveRelations.class));
-	    // TODO -- if we implement a baseline
-//	    aggregateBuilder.add(this.baseline ? RecallBaselineEventTimeRelationAnnotator.createAnnotatorDescription(directory) :
-//	    	EventTimeRelationAnnotator.createAnnotatorDescription(directory));
-	    aggregateBuilder.add(
-	    	EventEventRelationAnnotator.createAnnotatorDescription(directory));
-
-	    Function<BinaryTextRelation, ?> getSpan = new Function<BinaryTextRelation, HashableArguments>() {
-	      public HashableArguments apply(BinaryTextRelation relation) {
-	        return new HashableArguments(relation);
-	      }
-	    };
-	    Function<BinaryTextRelation, String> getOutcome = AnnotationStatistics.annotationToFeatureValue("category");
-
-	    AnnotationStatistics<String> stats = new AnnotationStatistics<String>();
-	   	JCasIterable jcasIter =new JCasIterable(collectionReader, aggregateBuilder.createAggregate());
-	    JCas jCas = null;
-	   	while(jcasIter.hasNext()) {
-	      jCas = jcasIter.next();
-	      JCas goldView = jCas.getView(GOLD_VIEW_NAME);
-	      JCas systemView = jCas.getView(CAS.NAME_DEFAULT_SOFA);
-	      Collection<BinaryTextRelation> goldRelations = JCasUtil.select(
-	          goldView,
-	          BinaryTextRelation.class);
-	      Collection<BinaryTextRelation> systemRelations = JCasUtil.select(
-	          systemView,
-	          BinaryTextRelation.class);
-	      stats.add(goldRelations, systemRelations, getSpan, getOutcome);
-	      if(this.printRelations){
-	    	  URI uri = ViewURIUtil.getURI(jCas);
-	    	  String[] path = uri.getPath().split("/");
-	    	  printRelationAnnotations(path[path.length - 1], systemRelations);
-	      }
-	      if(this.printErrors){
-	    	  Map<HashableArguments, BinaryTextRelation> goldMap = Maps.newHashMap();
-	    	  for (BinaryTextRelation relation : goldRelations) {
-	    		  goldMap.put(new HashableArguments(relation), relation);
-	    	  }
-	    	  Map<HashableArguments, BinaryTextRelation> systemMap = Maps.newHashMap();
-	    	  for (BinaryTextRelation relation : systemRelations) {
-	    		  systemMap.put(new HashableArguments(relation), relation);
-	    	  }
-	    	  Set<HashableArguments> all = Sets.union(goldMap.keySet(), systemMap.keySet());
-	    	  List<HashableArguments> sorted = Lists.newArrayList(all);
-	    	  Collections.sort(sorted);
-	    	  for (HashableArguments key : sorted) {
-	    		  BinaryTextRelation goldRelation = goldMap.get(key);
-	    		  BinaryTextRelation systemRelation = systemMap.get(key);
-	    		  if (goldRelation == null) {
-	    			  System.out.println("System added: " + formatRelation(systemRelation));
-	    		  } else if (systemRelation == null) {
-	    			  System.out.println("System dropped: " + formatRelation(goldRelation));
-	    		  } else if (!systemRelation.getCategory().equals(goldRelation.getCategory())) {
-	    			  String label = systemRelation.getCategory();
-	    			  System.out.printf("System labeled %s for %s\n", label, formatRelation(goldRelation));
-	    		  } else{
-	    			  System.out.println("Nailed it! " + formatRelation(systemRelation));
-	    		  }
-	    	  }
-	      }
-	    }
-	    return stats;
-	}
-
-	public static void main(String[] args) throws Exception{
-	    TempRelOptions options = CliFactory.parseArguments(TempRelOptions.class, args);
-	    List<Integer> patientSets = options.getPatients().getList();
-	    List<Integer> trainItems = THYMEData.getTrainPatientSets(patientSets);
-	    List<Integer> devItems = THYMEData.getDevPatientSets(patientSets);
-	    List<Integer> testItems = THYMEData.getTestPatientSets(patientSets);
-  	  	File workingDir = new File("target/eval/temporal-relations/event-event/");
-  	  	ParameterSettings params = defaultParams;
-        EvaluationOfEventEventRelations evaluation = new EvaluationOfEventEventRelations(
-  			  workingDir,
-  			  options.getRawTextDirectory(),
-  			  options.getKnowtatorXMLDirectory(),
-  			  options.getXMIDirectory(),
-  			  options.getTreebankDirectory(),
-  			  options.getClosure(),
-  			  options.getPrintErrors(),
-  			  options.getPrintFormattedRelations(),
-  			  options.getBaseline(),
-  			  options.getKernelParams(),
-  			  params);
-  	  evaluation.prepareXMIsFor(patientSets);
-  	  List<Integer> training = trainItems;
-  	  List<Integer> testing = null;
-  	  if(options.getTest()){
-  		  training.addAll(devItems);
-  		  testing = testItems;
-  	  }else{
-  		  testing = devItems;
-  	  }
-  	  params.stats = evaluation.trainAndTest(training, testing);
-	  System.err.println(params.stats);
-	}
+  public EvaluationOfEventEventRelations(      
+      File baseDirectory,
+      File rawTextDirectory,
+      File knowtatorXMLDirectory,
+      File xmiDirectory,
+      File treebankDirectory,
+      boolean printErrors,
+      boolean printRelations,
+      ParameterSettings params){
+    super(baseDirectory, rawTextDirectory, knowtatorXMLDirectory, xmiDirectory,
+        treebankDirectory, printErrors, printRelations, params);
+
+  }
+
+  @Override
+  protected void train(CollectionReader collectionReader, File directory)
+      throws Exception {
+    AggregateBuilder aggregateBuilder = this.getPreprocessorAggregateBuilder();
+    aggregateBuilder.add(CopyFromGold.getDescription(EventMention.class, TimeMention.class, BinaryTextRelation.class));
+    //	    aggregateBuilder.add(AnalysisEngineFactory.createPrimitiveDescription(MergeContainsOverlap.class));
+    aggregateBuilder.add(AnalysisEngineFactory.createPrimitiveDescription(RemoveNonContainsRelations.class));
+    aggregateBuilder.add(AnalysisEngineFactory.createPrimitiveDescription(RemoveCrossSentenceRelations.class));
+    // TODO -- see if this applies to this relation:
+    //	    if (this.useClosure) {
+    //	      aggregateBuilder.add(AnalysisEngineFactory.createPrimitiveDescription(AddTransitiveContainsRelations.class));
+    //	    }
+    aggregateBuilder.add(AnalysisEngineFactory.createPrimitiveDescription(PreserveEventEventRelations.class));
+    aggregateBuilder.add(EventEventRelationAnnotator.createDataWriterDescription(
+        LIBSVMStringOutcomeDataWriter.class,
+        //	        TKSVMlightStringOutcomeDataWriter.class,
+        directory,
+        1.0));
+    SimplePipeline.runPipeline(collectionReader, aggregateBuilder.createAggregate());
+
+    HideOutput hider = new HideOutput();
+    JarClassifierBuilder.trainAndPackage(directory,  "-t", "0", "-c", "10");
+    hider.restoreOutput();
+    hider.close();
+  }
+
+  @Override
+  protected AnnotationStatistics<String> test(
+      CollectionReader collectionReader, File directory) throws Exception {
+    AggregateBuilder aggregateBuilder = this.getPreprocessorAggregateBuilder();
+    aggregateBuilder.add(CopyFromGold.getDescription(EventMention.class, TimeMention.class));
+    //	    aggregateBuilder.add(AnalysisEngineFactory.createPrimitiveDescription(MergeContainsOverlap.class,
+    //	    		MergeContainsOverlap.PARAM_RELATION_VIEW,
+    //	    		GOLD_VIEW_NAME));
+    aggregateBuilder.add(
+        AnalysisEngineFactory.createPrimitiveDescription(RemoveNonContainsRelations.class),
+        CAS.NAME_DEFAULT_SOFA,
+        GOLD_VIEW_NAME);
+    aggregateBuilder.add(AnalysisEngineFactory.createPrimitiveDescription(
+        RemoveCrossSentenceRelations.class,
+        RemoveCrossSentenceRelations.PARAM_SENTENCE_VIEW,
+        CAS.NAME_DEFAULT_SOFA,
+        RemoveCrossSentenceRelations.PARAM_RELATION_VIEW,
+        GOLD_VIEW_NAME));
+    // TODO - use if relevant.
+    //	    if (this.useClosure) {
+    //	      aggregateBuilder.add(
+    //	          AnalysisEngineFactory.createPrimitiveDescription(AddTransitiveContainsRelations.class),
+    //	          CAS.NAME_DEFAULT_SOFA,
+    //	          GOLD_VIEW_NAME);
+    //	    }
+    aggregateBuilder.add(
+        AnalysisEngineFactory.createPrimitiveDescription(PreserveEventEventRelations.class),
+        CAS.NAME_DEFAULT_SOFA,
+        GOLD_VIEW_NAME);
+
+    aggregateBuilder.add(AnalysisEngineFactory.createPrimitiveDescription(RemoveRelations.class));
+    // TODO -- if we implement a baseline
+    //	    aggregateBuilder.add(this.baseline ? RecallBaselineEventTimeRelationAnnotator.createAnnotatorDescription(directory) :
+    //	    	EventTimeRelationAnnotator.createAnnotatorDescription(directory));
+    aggregateBuilder.add(
+        EventEventRelationAnnotator.createAnnotatorDescription(directory));
+
+    Function<BinaryTextRelation, ?> getSpan = new Function<BinaryTextRelation, HashableArguments>() {
+      public HashableArguments apply(BinaryTextRelation relation) {
+        return new HashableArguments(relation);
+      }
+    };
+    Function<BinaryTextRelation, String> getOutcome = AnnotationStatistics.annotationToFeatureValue("category");
+
+    AnnotationStatistics<String> stats = new AnnotationStatistics<String>();
+    JCasIterable jcasIter =new JCasIterable(collectionReader, aggregateBuilder.createAggregate());
+    JCas jCas = null;
+    while(jcasIter.hasNext()) {
+      jCas = jcasIter.next();
+      JCas goldView = jCas.getView(GOLD_VIEW_NAME);
+      JCas systemView = jCas.getView(CAS.NAME_DEFAULT_SOFA);
+      Collection<BinaryTextRelation> goldRelations = JCasUtil.select(
+          goldView,
+          BinaryTextRelation.class);
+      Collection<BinaryTextRelation> systemRelations = JCasUtil.select(
+          systemView,
+          BinaryTextRelation.class);
+      stats.add(goldRelations, systemRelations, getSpan, getOutcome);
+      if(this.printRelations){
+        URI uri = ViewURIUtil.getURI(jCas);
+        String[] path = uri.getPath().split("/");
+        printRelationAnnotations(path[path.length - 1], systemRelations);
+      }
+      if(this.printErrors){
+        Map<HashableArguments, BinaryTextRelation> goldMap = Maps.newHashMap();
+        for (BinaryTextRelation relation : goldRelations) {
+          goldMap.put(new HashableArguments(relation), relation);
+        }
+        Map<HashableArguments, BinaryTextRelation> systemMap = Maps.newHashMap();
+        for (BinaryTextRelation relation : systemRelations) {
+          systemMap.put(new HashableArguments(relation), relation);
+        }
+        Set<HashableArguments> all = Sets.union(goldMap.keySet(), systemMap.keySet());
+        List<HashableArguments> sorted = Lists.newArrayList(all);
+        Collections.sort(sorted);
+        for (HashableArguments key : sorted) {
+          BinaryTextRelation goldRelation = goldMap.get(key);
+          BinaryTextRelation systemRelation = systemMap.get(key);
+          if (goldRelation == null) {
+            System.out.println("System added: " + formatRelation(systemRelation));
+          } else if (systemRelation == null) {
+            System.out.println("System dropped: " + formatRelation(goldRelation));
+          } else if (!systemRelation.getCategory().equals(goldRelation.getCategory())) {
+            String label = systemRelation.getCategory();
+            System.out.printf("System labeled %s for %s\n", label, formatRelation(goldRelation));
+          } else{
+            System.out.println("Nailed it! " + formatRelation(systemRelation));
+          }
+        }
+      }
+    }
+    return stats;
+  }
+
+  public static void main(String[] args) throws Exception{
+    TempRelOptions options = CliFactory.parseArguments(TempRelOptions.class, args);
+    List<Integer> patientSets = options.getPatients().getList();
+    List<Integer> trainItems = THYMEData.getTrainPatientSets(patientSets);
+    List<Integer> devItems = THYMEData.getDevPatientSets(patientSets);
+    List<Integer> testItems = THYMEData.getTestPatientSets(patientSets);
+    File workingDir = new File("target/eval/temporal-relations/event-event/");
+    ParameterSettings params = defaultParams;
+    EvaluationOfEventEventRelations evaluation = new EvaluationOfEventEventRelations(
+        workingDir,
+        options.getRawTextDirectory(),
+        options.getKnowtatorXMLDirectory(),
+        options.getXMIDirectory(),
+        options.getTreebankDirectory(),
+        options.getPrintErrors(),
+        options.getPrintFormattedRelations(),
+        params);
+    evaluation.prepareXMIsFor(patientSets);
+    List<Integer> training = trainItems;
+    List<Integer> testing = null;
+    if(options.getTest()){
+      training.addAll(devItems);
+      testing = testItems;
+    }else{
+      testing = devItems;
+    }
+    AnnotationStatistics<String> stats = evaluation.trainAndTest(training, testing);
+    System.err.println(stats);
+  }
 
 }
-*/
\ No newline at end of file

Modified: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/eval/EvaluationOfTemporalRelations_ImplBase.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/eval/EvaluationOfTemporalRelations_ImplBase.java?rev=1481308&r1=1481307&r2=1481308&view=diff
==============================================================================
--- ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/eval/EvaluationOfTemporalRelations_ImplBase.java (original)
+++ ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/eval/EvaluationOfTemporalRelations_ImplBase.java Sat May 11 12:06:44 2013
@@ -1,15 +1,23 @@
-/*package org.apache.ctakes.temporal.eval;
+package org.apache.ctakes.temporal.eval;
 
 import java.io.File;
 import java.util.Collection;
 
-import org.apache.ctakes.temporal.eval.EvaluationOfTemporalRelations.ParameterSettings;
+import org.apache.ctakes.relationextractor.eval.RelationExtractorEvaluation.ParameterSettings;
 import org.apache.ctakes.typesystem.type.relation.BinaryTextRelation;
+import org.apache.ctakes.typesystem.type.relation.RelationArgument;
+import org.apache.ctakes.typesystem.type.textsem.EventMention;
 import org.apache.ctakes.typesystem.type.textsem.IdentifiedAnnotation;
+import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
+import org.apache.uima.cas.CAS;
+import org.apache.uima.jcas.JCas;
 import org.apache.uima.jcas.tcas.Annotation;
-import org.cleartk.classifier.tksvmlight.model.CompositeKernel.ComboOperator;
 import org.cleartk.eval.AnnotationStatistics;
+import org.uimafit.component.JCasAnnotator_ImplBase;
+import org.uimafit.descriptor.ConfigurationParameter;
+import org.uimafit.util.JCasUtil;
 
+import com.google.common.collect.Lists;
 import com.lexicalscope.jewel.cli.Option;
 
 public abstract class EvaluationOfTemporalRelations_ImplBase extends
@@ -36,8 +44,8 @@ public abstract class EvaluationOfTempor
 	  protected static double DEFAULT_TK = 0.5;
 	  protected static double DEFAULT_LAMBDA = 0.5;
 	  
-	  protected static ParameterSettings defaultParams = new ParameterSettings(DEFAULT_BOTH_DIRECTIONS, DEFAULT_DOWNSAMPLE, "linear",
-	  		  DEFAULT_SVM_C, DEFAULT_SVM_G, "polynomial", ComboOperator.SUM, DEFAULT_TK, DEFAULT_LAMBDA);
+	  protected static ParameterSettings defaultParams = null; //new ParameterSettings(DEFAULT_BOTH_DIRECTIONS, DEFAULT_DOWNSAMPLE, "linear",
+	  		  //DEFAULT_SVM_C, DEFAULT_SVM_G, "polynomial", ComboOperator.SUM, DEFAULT_TK, DEFAULT_LAMBDA);
 
 	  
 	  protected ParameterSettings params = null;
@@ -53,6 +61,28 @@ public abstract class EvaluationOfTempor
 		this.printErrors =  printErrors;
 	}
 
+  public static class PreserveEventEventRelations extends JCasAnnotator_ImplBase {
+    public static final String PARAM_GOLD_VIEW = "GoldView";
+
+    @ConfigurationParameter(name = PARAM_GOLD_VIEW)
+    private String goldViewName = CAS.NAME_DEFAULT_SOFA;
+
+    @Override
+    public void process(JCas jCas) throws AnalysisEngineProcessException {
+      for(BinaryTextRelation relation : Lists.newArrayList(JCasUtil.select(jCas, BinaryTextRelation.class))){
+          RelationArgument arg1 = relation.getArg1();
+          RelationArgument arg2 = relation.getArg2();
+          if(arg1.getArgument() instanceof EventMention && arg2.getArgument() instanceof EventMention){
+            // these are the kind we keep.
+            continue;
+          }
+          arg1.removeFromIndexes();
+          arg2.removeFromIndexes();
+          relation.removeFromIndexes();
+      }
+    }   
+  }
+
 	  protected static void printRelationAnnotations(String fileName, Collection<BinaryTextRelation> relations) {
 
 		  for(BinaryTextRelation binaryTextRelation : relations) {
@@ -94,4 +124,3 @@ public abstract class EvaluationOfTempor
 	  }
 
 }
-*/
\ No newline at end of file