Merge pull request #31 from apache/UIMA-6338-Inconsistency-Interpreter-vs-Guide-on-VOTE

UIMA-6338: Ruta: Inconsistency Interpreter vs. Guide on VOTE
diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java b/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java
index a63c052..a8f2036 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java
@@ -1113,8 +1113,12 @@
   }

 

   public Collection<AnnotationFS> getAnnotations(Type type) {

+

+    return getAnnotations(type, filter.getWindowAnnotation());

+  }

+

+  public Collection<AnnotationFS> getAnnotations(Type type, AnnotationFS windowAnnotation) {

     Collection<AnnotationFS> result = new LinkedList<>();

-    AnnotationFS windowAnnotation = filter.getWindowAnnotation();

     if (windowAnnotation != null

             && (windowAnnotation.getBegin() != cas.getDocumentAnnotation().getBegin()

                     || windowAnnotation.getEnd() != cas.getDocumentAnnotation().getEnd())) {

diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/condition/VoteCondition.java b/ruta-core/src/main/java/org/apache/uima/ruta/condition/VoteCondition.java
index d9295ab..c08fa94 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/condition/VoteCondition.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/condition/VoteCondition.java
@@ -19,15 +19,12 @@
 

 package org.apache.uima.ruta.condition;

 

-import java.util.List;

-

 import org.apache.uima.cas.Type;

 import org.apache.uima.cas.text.AnnotationFS;

 import org.apache.uima.ruta.RutaStream;

 import org.apache.uima.ruta.expression.type.ITypeExpression;

 import org.apache.uima.ruta.rule.EvaluatedCondition;

 import org.apache.uima.ruta.rule.MatchContext;

-import org.apache.uima.ruta.type.RutaBasic;

 import org.apache.uima.ruta.visitor.InferenceCrowd;

 

 public class VoteCondition extends TerminalRutaCondition {

@@ -45,22 +42,15 @@
   @Override

   public EvaluatedCondition eval(MatchContext context, RutaStream stream, InferenceCrowd crowd) {

     AnnotationFS annotation = context.getAnnotation();

-    int count1 = 0;

-    int count2 = 0;

     Type t1 = type1.getType(context, stream);

     Type t2 = type2.getType(context, stream);

 

-    if (annotation != null && t1 != null && t2 != null) {

-      List<RutaBasic> annotations = stream.getBasicsInWindow(annotation);

-      for (RutaBasic each : annotations) {

-        if (each.beginsWith(t1)) {

-          count1++;

-        }

-        if (each.beginsWith(t2)) {

-          count2++;

-        }

-      }

+    if (t1 == null || t2 == null) {

+      return new EvaluatedCondition(this, false);

     }

+

+    int count1 = stream.getAnnotations(t1, annotation).size();

+    int count2 = stream.getAnnotations(t2, annotation).size();

     return new EvaluatedCondition(this, count1 > count2);

   }

 

diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/condition/VoteTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/condition/VoteTest.java
index 605561f..7b0f049 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/condition/VoteTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/condition/VoteTest.java
@@ -20,6 +20,7 @@
 package org.apache.uima.ruta.condition;

 

 import org.apache.uima.cas.CAS;

+import org.apache.uima.ruta.engine.Ruta;

 import org.apache.uima.ruta.engine.RutaTestUtils;

 import org.junit.Test;

 

@@ -30,10 +31,35 @@
 

     CAS cas = RutaTestUtils.processTestScript(this.getClass());

 

-    RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "Use the VOTE Condition, to compare the number of occurrences"

-            + " of two different annotations.");

+    RutaTestUtils.assertAnnotationsEquals(cas, 1, 1,

+            "Use the VOTE Condition, to compare the number of occurrences"

+                    + " of two different annotations.");

     RutaTestUtils.assertAnnotationsEquals(cas, 2, 0);

-

-    cas.release();

   }

+

+  @Test

+  public void testInWindowOnly() throws Exception {

+

+    String document = "1 2 . A b C d . 3 4";

+

+    String script = "PERIOD #{-> T1} PERIOD;";

+    script += "(CW ANY ANY){->T2};";

+    script += "SW{->T3};";

+    script += "\"b\"{->T4};";

+    script += "T1{VOTE(T2,T3)->T5};"; // 1 > 2?

+    script += "T1{-VOTE(T2,T3)->T6};"; // not 1 > 2?

+    script += "T1{VOTE(T2,T4)->T7};"; // 1 > 1?

+    script += "T1{VOTE(T4,T2)->T8};"; // 1 > 1?

+

+    CAS cas = RutaTestUtils.getCAS(document);

+    Ruta.apply(cas, script);

+

+    RutaTestUtils.assertAnnotationsEquals(cas, 2, 2, "A b C", "C d .");

+    RutaTestUtils.assertAnnotationsEquals(cas, 5, 0);

+    RutaTestUtils.assertAnnotationsEquals(cas, 6, 1, "A b C d");

+    RutaTestUtils.assertAnnotationsEquals(cas, 7, 0);

+    RutaTestUtils.assertAnnotationsEquals(cas, 8, 0);

+

+  }

+

 }

diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/engine/DummySeeder.java b/ruta-core/src/test/java/org/apache/uima/ruta/engine/DummySeeder.java
index 840f8dc..057a175 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/engine/DummySeeder.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/engine/DummySeeder.java
@@ -33,5 +33,5 @@
     cas.addFsToIndexes(annotation);
     return type;
   }
-
+  
 }
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/engine/TestRutaInferenceVisitor.java b/ruta-core/src/test/java/org/apache/uima/ruta/engine/TestRutaInferenceVisitor.java
index 4988241..5cf4ca5 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/engine/TestRutaInferenceVisitor.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/engine/TestRutaInferenceVisitor.java
@@ -40,7 +40,6 @@
   public void endVisit(RutaElement element, ScriptApply result) {

     throw new NotImplementedException("Not supported.");

   }

-

   @Override

   public void finished(RutaStream stream, List<RutaInferenceVisitor> visitors) {

     throw new NotImplementedException("Not supported.");