You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ctakes.apache.org by dl...@apache.org on 2016/09/06 15:47:57 UTC

svn commit: r1759449 - /ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/nn/data/EventTimeRelPrinter.java

Author: dligach
Date: Tue Sep  6 15:47:57 2016
New Revision: 1759449

URL: http://svn.apache.org/viewvc?rev=1759449&view=rev
Log:
cleanup

Modified:
    ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/nn/data/EventTimeRelPrinter.java

Modified: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/nn/data/EventTimeRelPrinter.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/nn/data/EventTimeRelPrinter.java?rev=1759449&r1=1759448&r2=1759449&view=diff
==============================================================================
--- ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/nn/data/EventTimeRelPrinter.java (original)
+++ ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/nn/data/EventTimeRelPrinter.java Tue Sep  6 15:47:57 2016
@@ -106,7 +106,7 @@ public class EventTimeRelPrinter {
     // write training data to file
     CollectionReader trainCollectionReader = Utils.getCollectionReader(trainFiles);
     AnalysisEngine trainDataWriter = AnalysisEngineFactory.createEngine(
-        RelationSnippetPrinter.class,
+        TrainRelationSnippetPrinter.class,
         "OutputFile",
         trainFile.getAbsoluteFile());
     SimplePipeline.runPipeline(trainCollectionReader, trainDataWriter);
@@ -114,7 +114,7 @@ public class EventTimeRelPrinter {
     // write dev data to file
     CollectionReader devCollectionReader = Utils.getCollectionReader(devFiles);
     AnalysisEngine devDataWriter = AnalysisEngineFactory.createEngine(
-        RelationSnippetPrinter.class,
+        TestRelationSnippetPrinter.class,
         "OutputFile",
         devFile.getAbsolutePath());
     SimplePipeline.runPipeline(devCollectionReader, devDataWriter);
@@ -125,7 +125,7 @@ public class EventTimeRelPrinter {
    * 
    * @author dmitriy dligach
    */
-  public static class RelationSnippetPrinter extends JCasAnnotator_ImplBase {
+  public static class TrainRelationSnippetPrinter extends JCasAnnotator_ImplBase {
 
     @ConfigurationParameter(
         name = "OutputFile",
@@ -185,15 +185,98 @@ public class EventTimeRelPrinter {
             if(timeEventRelation != null) {
               if(timeEventRelation.getCategory().equals("CONTAINS")) {
                 label = "contains";  // this is contains
-              } else {
-                // label = "none";      // e.g. before or overlap
+              }
+            }
+            // there is at least one instance where both event-time and time-event rels exist?
+            if(eventTimeRelation != null) {
+              if(eventTimeRelation.getCategory().equals("CONTAINS")) {
+                label = "contains-1"; // this is contains
+              } 
+            } 
+
+            String context;
+            if(time.getBegin() < event.getBegin()) {
+              // ... time ... event ... scenario
+              context = getTokenContext(systemView, sentence, time, "t", event, "e", 2);  
+            } else {
+              // ... event ... time ... scenario
+              context = getTokenContext(systemView, sentence, event, "e", time, "t", 2);
+            }
+
+            String text = String.format("%s|%s", label, context);
+            eventTimeRelationsInSentence.add(text.toLowerCase());
+          }
+        }  
+
+        try {
+          Files.write(Paths.get(outputFile), eventTimeRelationsInSentence, StandardOpenOption.APPEND);
+        } catch (IOException e) {
+          e.printStackTrace();
+        }
+      }
+    }
+  }
+
+  /**
+   * Print gold standard relations and their context.
+   * 
+   * @author dmitriy dligach
+   */
+  public static class TestRelationSnippetPrinter extends JCasAnnotator_ImplBase {
+
+    @ConfigurationParameter(
+        name = "OutputFile",
+        mandatory = true,
+        description = "path to the output file")
+    private String outputFile;
+
+    @Override
+    public void process(JCas jCas) throws AnalysisEngineProcessException {
+
+      JCas goldView;
+      try {
+        goldView = jCas.getView("GoldView");
+      } catch (CASException e) {
+        throw new AnalysisEngineProcessException(e);
+      }
+
+      JCas systemView;
+      try {
+        systemView = jCas.getView("_InitialView");
+      } catch (CASException e) {
+        throw new AnalysisEngineProcessException(e);
+      }
+
+      // can't iterate over binary text relations in a sentence, so need
+      // a lookup from pair of annotations to binary text relation
+      Map<List<Annotation>, BinaryTextRelation> relationLookup = new HashMap<>();
+      for(BinaryTextRelation relation : JCasUtil.select(goldView, TemporalTextRelation.class)) {
+        Annotation arg1 = relation.getArg1().getArgument();
+        Annotation arg2 = relation.getArg2().getArgument();
+        relationLookup.put(Arrays.asList(arg1, arg2), relation);
+      }
+
+      // go over sentences, extracting event-event relation instances
+      for(Sentence sentence : JCasUtil.select(systemView, Sentence.class)) {
+        List<String> eventTimeRelationsInSentence = new ArrayList<>();
+
+        // retrieve event-time relations in this sentence
+        for(EventMention event : JCasUtil.selectCovered(goldView, EventMention.class, sentence)) {
+          for(TimeMention time : JCasUtil.selectCovered(goldView, TimeMention.class, sentence)) {
+
+            BinaryTextRelation timeEventRelation = relationLookup.get(Arrays.asList(time, event));
+            BinaryTextRelation eventTimeRelation = relationLookup.get(Arrays.asList(event, time));
+
+            // TODO: am I capturing multiple relations here? probably not...
+            String label = "none";
+            if(timeEventRelation != null) {
+              if(timeEventRelation.getCategory().equals("CONTAINS")) {
+                label = "contains";  // this is contains
               }
             } 
             if(eventTimeRelation != null) {
               if(eventTimeRelation.getCategory().equals("CONTAINS")) {
                 label = "contains-1"; // this is contains
-              } else {
-                // label = "none";       // some other relation type
               }
             }