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 2013/08/22 21:55:13 UTC

svn commit: r1516568 - /ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/data/analysis/SignSymptomDurations.java

Author: dligach
Date: Thu Aug 22 19:55:13 2013
New Revision: 1516568

URL: http://svn.apache.org/r1516568
Log:
use nearest time to an event 

Modified:
    ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/data/analysis/SignSymptomDurations.java

Modified: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/data/analysis/SignSymptomDurations.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/data/analysis/SignSymptomDurations.java?rev=1516568&r1=1516567&r2=1516568&view=diff
==============================================================================
--- ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/data/analysis/SignSymptomDurations.java (original)
+++ ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/data/analysis/SignSymptomDurations.java Thu Aug 22 19:55:13 2013
@@ -19,12 +19,18 @@
 package org.apache.ctakes.temporal.data.analysis;
 
 import java.io.File;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.ctakes.relationextractor.eval.XMIReader;
 import org.apache.ctakes.typesystem.type.structured.DocumentID;
+import org.apache.ctakes.typesystem.type.syntax.BaseToken;
+import org.apache.ctakes.typesystem.type.syntax.TreebankNode;
 import org.apache.ctakes.typesystem.type.textsem.SignSymptomMention;
 import org.apache.ctakes.typesystem.type.textsem.TimeMention;
 import org.apache.uima.analysis_engine.AnalysisEngine;
@@ -41,6 +47,10 @@ import org.uimafit.factory.CollectionRea
 import org.uimafit.pipeline.SimplePipeline;
 import org.uimafit.util.JCasUtil;
 
+import com.google.common.base.Function;
+import com.google.common.base.Functions;
+import com.google.common.collect.Ordering;
+
 /**
  * ...
  * 
@@ -73,6 +83,9 @@ public class SignSymptomDurations {
   
   public static class DurationPrinter extends JCasAnnotator_ImplBase {
 
+    // max distance between a time and an evenet
+    final int maxDistance = 2;
+    
     @Override
     public void process(JCas jCas) throws AnalysisEngineProcessException {
 
@@ -86,11 +99,24 @@ public class SignSymptomDurations {
       Collection<DocumentID> ids = JCasUtil.select(systemView, DocumentID.class);
       String fileName = ids.iterator().next().getDocumentID();
       String signSymptomText = fileName.split("\\.")[0]; // e.g. "smoker.txt"
-      
+
       for(SignSymptomMention signSymptomMention : JCasUtil.select(systemView, SignSymptomMention.class)) {
+
         if(signSymptomMention.getCoveredText().equals(signSymptomText)) {
+          Map<TimeMention, Integer> distances = new HashMap<TimeMention, Integer>();
+
           for(TimeMention timeMention : JCasUtil.selectFollowing(systemView, TimeMention.class, signSymptomMention, 1)) {
-            System.out.println(signSymptomMention.getCoveredText() + ": " + timeMention.getCoveredText());
+            int distance = JCasUtil.selectBetween(systemView, BaseToken.class, signSymptomMention, timeMention).size();
+            distances.put(timeMention, distance);
+          }
+
+          // find closest time to this sign/symptom
+          List<TimeMention> sortedTimeMentions = new ArrayList<TimeMention>(distances.keySet());
+          Function<TimeMention, Integer> getValue = Functions.forMap(distances);
+          Collections.sort(sortedTimeMentions, Ordering.natural().onResultOf(getValue));
+
+          if(sortedTimeMentions.size() > 0 && distances.get(sortedTimeMentions.get(0)) <= maxDistance) {
+            System.out.println(signSymptomMention.getCoveredText() + ": " + sortedTimeMentions.get(0).getCoveredText());
           }
         }
       }