You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by pk...@apache.org on 2012/11/28 13:39:47 UTC

svn commit: r1414651 - in /uima/sandbox/trunk/TextMarker/uimaj-textmarker/src: main/java/org/apache/uima/textmarker/condition/ContextCountCondition.java test/java/org/apache/uima/textmarker/condition/ContextCountTest.java

Author: pkluegl
Date: Wed Nov 28 12:39:30 2012
New Revision: 1414651

URL: http://svn.apache.org/viewvc?rev=1414651&view=rev
Log:
UIMA-2505
- reimplemented CONTEXTCOUNT condition
- fixed junit test for that condition

Modified:
    uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/main/java/org/apache/uima/textmarker/condition/ContextCountCondition.java
    uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/test/java/org/apache/uima/textmarker/condition/ContextCountTest.java

Modified: uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/main/java/org/apache/uima/textmarker/condition/ContextCountCondition.java
URL: http://svn.apache.org/viewvc/uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/main/java/org/apache/uima/textmarker/condition/ContextCountCondition.java?rev=1414651&r1=1414650&r2=1414651&view=diff
==============================================================================
--- uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/main/java/org/apache/uima/textmarker/condition/ContextCountCondition.java (original)
+++ uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/main/java/org/apache/uima/textmarker/condition/ContextCountCondition.java Wed Nov 28 12:39:30 2012
@@ -19,8 +19,11 @@
 
 package org.apache.uima.textmarker.condition;
 
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
 
+import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.textmarker.TextMarkerStream;
 import org.apache.uima.textmarker.expression.number.NumberExpression;
@@ -50,32 +53,56 @@ public class ContextCountCondition exten
   @Override
   public EvaluatedCondition eval(AnnotationFS annotation, RuleElement element,
           TextMarkerStream stream, InferenceCrowd crowd) {
-    List<TextMarkerBasic> annotationsInWindow = null;
-    if (stream.getDocumentAnnotation().getType().equals(type.getType(element.getParent()))) {
-      annotationsInWindow = stream.getBasicsInWindow(stream.getDocumentAnnotation());
-    } else {
-      annotationsInWindow = stream.getAnnotationsOverlappingWindow(annotation);
+    Type contextType = type.getType(element.getParent());
+    stream.moveToFirst();
+    List<AnnotationFS> visibleContexts = new ArrayList<AnnotationFS>();
+    while (stream.isValid()) {
+      TextMarkerBasic each = (TextMarkerBasic) stream.get();
+      if (each.beginsWith(contextType)) {
+        visibleContexts.addAll(each.getBeginAnchors(contextType));
+      }
+      stream.moveToNext();
     }
-    int counter = 0;
-    int count = 0;
-    for (TextMarkerBasic eachBasic : annotationsInWindow) {
-      if (eachBasic.beginsWith(annotation.getType())
-              || stream.getCas().getTypeSystem()
-                      .subsumes(annotation.getType(), eachBasic.getType())) {
-        counter++;
-        if (eachBasic.equals(annotation)) {
-          count = counter;
-          break;
-        }
+    List<AnnotationFS> overlappingContexts = new ArrayList<AnnotationFS>();
+    for (AnnotationFS eachContext : visibleContexts) {
+      if (eachContext.getBegin() <= annotation.getBegin()
+              && eachContext.getEnd() >= annotation.getEnd()) {
+        overlappingContexts.add(eachContext);
       }
     }
 
-    if (var != null) {
-      element.getParent().getEnvironment().setVariableValue(var, count);
+    boolean result = false;
+    for (AnnotationFS eachContext : overlappingContexts) {
+      int index = 0;
+      int counter = 0;
+      List<TextMarkerBasic> basicsInWindow = stream.getBasicsInWindow(eachContext);
+      for (TextMarkerBasic eachBasic : basicsInWindow) {
+        Set<AnnotationFS> beginAnchors = eachBasic.getBeginAnchors(annotation.getType());
+        if (beginAnchors != null) {
+          for (AnnotationFS each : beginAnchors) {
+            counter++;
+            if (each.getBegin() == annotation.getBegin()
+                    && each.getEnd() == annotation.getEnd()
+                    && (each.getType().equals(annotation.getType()) || stream.getCas()
+                            .getTypeSystem().subsumes(annotation.getType(), each.getType()))) {
+              index = counter;
+            }
+          }
+        }
+      }
+
+      if (var != null) {
+        element.getParent().getEnvironment().setVariableValue(var, index);
+      }
+      boolean value = index >= min.getIntegerValue(element.getParent())
+              && index <= max.getIntegerValue(element.getParent());
+      result |= value;
+      if (result) {
+        break;
+      }
     }
-    boolean value = count >= min.getIntegerValue(element.getParent())
-            && count <= max.getIntegerValue(element.getParent());
-    return new EvaluatedCondition(this, value);
+
+    return new EvaluatedCondition(this, result);
   }
 
   public NumberExpression getMin() {

Modified: uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/test/java/org/apache/uima/textmarker/condition/ContextCountTest.java
URL: http://svn.apache.org/viewvc/uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/test/java/org/apache/uima/textmarker/condition/ContextCountTest.java?rev=1414651&r1=1414650&r2=1414651&view=diff
==============================================================================
--- uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/test/java/org/apache/uima/textmarker/condition/ContextCountTest.java (original)
+++ uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/test/java/org/apache/uima/textmarker/condition/ContextCountTest.java Wed Nov 28 12:39:30 2012
@@ -58,11 +58,12 @@ public class ContextCountTest {
     
     t = TextMarkerTestUtils.getTestType(cas, 2);
     ai = cas.getAnnotationIndex(t);
-    assertEquals(3, ai.size());
+    assertEquals(4, ai.size());
     iterator = ai.iterator();
     assertEquals("A", iterator.next().getCoveredText());
     assertEquals("And", iterator.next().getCoveredText());
     assertEquals("Testing", iterator.next().getCoveredText());
+    assertEquals("Text", iterator.next().getCoveredText());
     
     t = TextMarkerTestUtils.getTestType(cas, 3);
     ai = cas.getAnnotationIndex(t);
@@ -71,6 +72,6 @@ public class ContextCountTest {
     assertEquals("A single sentence." +
             "And here is another one." +
             "Testing the CONTEXTCOUNT condition of TextMarker.",
-            iterator.next().getCoveredText());
+            iterator.next().getCoveredText().replaceAll("[\n\r]", ""));
   }
 }