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.");