You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ctakes.apache.org by st...@apache.org on 2013/08/08 18:01:45 UTC

svn commit: r1511845 - in /ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal: ae/ClearTKDocTimeRelAnnotator.java ae/EventToClearTKEventAnnotator.java eval/EvaluationOfClearTKEventProperties.java

Author: stevenbethard
Date: Thu Aug  8 16:01:44 2013
New Revision: 1511845

URL: http://svn.apache.org/r1511845
Log:
Fixes some bugs in the evaluation of ClearTK docTimeRels.

Modified:
    ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/ClearTKDocTimeRelAnnotator.java
    ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventToClearTKEventAnnotator.java
    ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/eval/EvaluationOfClearTKEventProperties.java

Modified: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/ClearTKDocTimeRelAnnotator.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/ClearTKDocTimeRelAnnotator.java?rev=1511845&r1=1511844&r2=1511845&view=diff
==============================================================================
--- ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/ClearTKDocTimeRelAnnotator.java (original)
+++ ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/ClearTKDocTimeRelAnnotator.java Thu Aug  8 16:01:44 2013
@@ -1,23 +1,26 @@
 package org.apache.ctakes.temporal.ae;
 
-import org.apache.ctakes.typesystem.type.refsem.Event;
-import org.apache.ctakes.typesystem.type.refsem.EventProperties;
+import java.util.Map;
+
 import org.apache.ctakes.typesystem.type.textsem.EventMention;
 import org.apache.uima.analysis_engine.AnalysisEngineDescription;
 import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
 import org.apache.uima.jcas.JCas;
-import org.apache.uima.jcas.cas.FSArray;
 import org.apache.uima.resource.ResourceInitializationException;
 import org.cleartk.timeml.type.Anchor;
+import org.cleartk.timeml.type.DocumentCreationTime;
 import org.cleartk.timeml.type.TemporalLink;
 import org.uimafit.component.JCasAnnotator_ImplBase;
 import org.uimafit.factory.AnalysisEngineFactory;
 import org.uimafit.util.JCasUtil;
 
+import com.google.common.collect.Maps;
+
 /**
  * for every cTAKES EventMention annotation, create a ClearTK Event Annotation
+ * 
  * @author Chen Lin
- *
+ * 
  */
 public class ClearTKDocTimeRelAnnotator extends JCasAnnotator_ImplBase {
 
@@ -26,40 +29,35 @@ public class ClearTKDocTimeRelAnnotator 
 	}
 
 	@Override
-	public void process(JCas jCas)
-			throws AnalysisEngineProcessException {
+	public void process(JCas jCas) throws AnalysisEngineProcessException {
+		DocumentCreationTime dct = JCasUtil.selectSingle(jCas, DocumentCreationTime.class);
+		Map<EventMention, String> docTimeRels = Maps.newHashMap();
 		for (TemporalLink tlink : JCasUtil.select(jCas, TemporalLink.class)) {
-			// create a cleartk event object
-			String relation = tlink.getRelationType();
-//			System.out.println("__find tlink relation: " + relation + "		srouce: " + tlink.getSource().getCoveredText() + "  target: " + tlink.getTarget().getType().getName());
-			
-			Anchor linksource = tlink.getSource();
-			
-			EventMention ement = new EventMention(jCas);
-			ement.setBegin(linksource.getBegin());
-			ement.setEnd(linksource.getEnd());
-			Event event = new Event(jCas);
-			
-			EventProperties eventProperties = new EventProperties(jCas);
-			if ("INCLUDES".equals(relation)){
-  		    	eventProperties.setDocTimeRel("OVERLAP");
-  		    }else{
-  		    	eventProperties.setDocTimeRel(relation);
-  		    }
-  		    event.setProperties(eventProperties);
-  		    event.setMentions(new FSArray(jCas, 1));
-  		    event.setMentions(0, ement);
-		    ement.setEvent(event);
-		    
-		    eventProperties.addToIndexes();
-  		  	event.addToIndexes();
-  		  	ement.addToIndexes();
-		    
+			Anchor source = tlink.getSource();
+			Anchor target = tlink.getTarget();
+			if (source instanceof org.cleartk.timeml.type.Event && target.equals(dct)) {
+				for (EventMention event : JCasUtil.selectCovered(jCas, EventMention.class, source)) {
+					docTimeRels.put(event, tlink.getRelationType());
+				}
+			}
 		}
 
+		for (EventMention eventMention : JCasUtil.select(jCas, EventMention.class)) {
+			// needed because SignSymptomMention, etc. do not have EventProperties
+			if (eventMention.getClass().equals(EventMention.class)) {
+				String docTimeRel = docTimeRels.get(eventMention);
+				
+				// convert missing or INCLUDES to OVERLAP
+				if (docTimeRel == null || "INCLUDES".equals(docTimeRel)) {
+					docTimeRel = "OVERLAP";
+				}
+				eventMention.getEvent().getProperties().setDocTimeRel(docTimeRel);
+			}
+		}
 	}
 
-	public static AnalysisEngineDescription getAnnotatorDescription() throws ResourceInitializationException {
+	public static AnalysisEngineDescription getAnnotatorDescription()
+			throws ResourceInitializationException {
 		return AnalysisEngineFactory.createPrimitiveDescription(ClearTKDocTimeRelAnnotator.class);
 	}
 

Modified: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventToClearTKEventAnnotator.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventToClearTKEventAnnotator.java?rev=1511845&r1=1511844&r2=1511845&view=diff
==============================================================================
--- ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventToClearTKEventAnnotator.java (original)
+++ ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventToClearTKEventAnnotator.java Thu Aug  8 16:01:44 2013
@@ -12,8 +12,9 @@ import org.uimafit.util.JCasUtil;
 
 /**
  * for every cTAKES EventMention annotation, create a ClearTK Event Annotation
+ * 
  * @author Chen Lin
- *
+ * 
  */
 public class EventToClearTKEventAnnotator extends JCasAnnotator_ImplBase {
 
@@ -22,20 +23,23 @@ public class EventToClearTKEventAnnotato
 	}
 
 	@Override
-	public void process(JCas jCas)
-			throws AnalysisEngineProcessException {
+	public void process(JCas jCas) throws AnalysisEngineProcessException {
 		for (EventMention eMention : JCasUtil.select(jCas, EventMention.class)) {
-			// create a cleartk event object
-			Event event = new Event(jCas);
-			event.setBegin(eMention.getBegin());
-			event.setEnd(eMention.getEnd());
-			
-			event.addToIndexes();
+			// needed because SignSymptomMention, etc. do not have EventProperties
+			if (eMention.getClass().equals(EventMention.class)) {
+				// create a cleartk event object
+				Event event = new Event(jCas);
+				event.setBegin(eMention.getBegin());
+				event.setEnd(eMention.getEnd());
+
+				event.addToIndexes();
+			}
 		}
 
 	}
 
-	public static AnalysisEngineDescription getAnnotatorDescription() throws ResourceInitializationException {
+	public static AnalysisEngineDescription getAnnotatorDescription()
+			throws ResourceInitializationException {
 		return AnalysisEngineFactory.createPrimitiveDescription(EventToClearTKEventAnnotator.class);
 	}
 

Modified: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/eval/EvaluationOfClearTKEventProperties.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/eval/EvaluationOfClearTKEventProperties.java?rev=1511845&r1=1511844&r2=1511845&view=diff
==============================================================================
--- ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/eval/EvaluationOfClearTKEventProperties.java (original)
+++ ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/eval/EvaluationOfClearTKEventProperties.java Thu Aug  8 16:01:44 2013
@@ -35,6 +35,7 @@ import org.apache.ctakes.temporal.ae.Cle
 import org.apache.ctakes.temporal.ae.ClearTKDocTimeRelAnnotator;
 import org.apache.ctakes.typesystem.type.refsem.EventProperties;
 import org.apache.ctakes.typesystem.type.textsem.EventMention;
+import org.apache.ctakes.typesystem.type.textsem.TimeMention;
 import org.apache.ctakes.typesystem.type.textspan.Segment;
 import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
 import org.apache.uima.cas.CAS;
@@ -119,14 +120,13 @@ public class EvaluationOfClearTKEventPro
 		  CollectionReader collectionReader,
 		  File directory) throws Exception {
 	  AggregateBuilder aggregateBuilder = this.getPreprocessorAggregateBuilder();
-//	  aggregateBuilder.add(UriToDocumentTextAnnotator.getDescription()); 
+	  aggregateBuilder.add(CopyFromGold.getDescription(EventMention.class));
+	  aggregateBuilder.add(CopyFromGold.getDescription(TimeMention.class));
 	  aggregateBuilder.add(SentenceAnnotator.getDescription());
 	  aggregateBuilder.add(TokenAnnotator.getDescription());
 	  aggregateBuilder.add(PosTaggerAnnotator.getDescription());
 	  aggregateBuilder.add(DefaultSnowballStemmer.getDescription("English"));
 	  aggregateBuilder.add(ParserAnnotator.getDescription());
-//	  aggregateBuilder.add(CopyFromGold.getDescription(EventMention.class));
-//	  aggregateBuilder.add(CopyFromGold.getDescription(TimeMention.class));
 	  aggregateBuilder.add(EventToClearTKEventAnnotator.getAnnotatorDescription());//for every cTakes eventMention, create a cleartk event
 	  aggregateBuilder.add(ClearTKDocumentCreationTimeAnnotator.getAnnotatorDescription());//for every jCAS create an empty DCT, and add it to index
 	  aggregateBuilder.add(EventTenseAnnotator.FACTORY.getAnnotatorDescription("/org/cleartk/timeml/event/eventtenseannotator/model.jar"));