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 2018/07/31 09:01:01 UTC
svn commit: r1837129 - in /uima/ruta/trunk/ruta-core/src:
main/java/org/apache/uima/ruta/condition/ContainsCondition.java
test/java/org/apache/uima/ruta/condition/ContainsTest.java
Author: pkluegl
Date: Tue Jul 31 09:01:01 2018
New Revision: 1837129
URL: http://svn.apache.org/viewvc?rev=1837129&view=rev
Log:
UIMA-5850 - applied patch
Modified:
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ContainsCondition.java
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/ContainsTest.java
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ContainsCondition.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ContainsCondition.java?rev=1837129&r1=1837128&r2=1837129&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ContainsCondition.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ContainsCondition.java Tue Jul 31 09:01:01 2018
@@ -20,6 +20,7 @@
package org.apache.uima.ruta.condition;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
import org.apache.uima.cas.FSIterator;
@@ -89,9 +90,11 @@ public class ContainsCondition extends T
int anchorCount = 0;
int totalCount = 0;
+ boolean usePredefinedBoundaries = minIntValue == 1 && maxIntValue == Integer.MAX_VALUE ? false : true;
+
if (type != null) {
if (annotation != null) {
- if (minIntValue == 1 && maxIntValue == Integer.MAX_VALUE && !usePercentage) {
+ if (!usePredefinedBoundaries && !usePercentage) {
// shortcut for simple CONTAINS(Type)
Type t = type.getType(context, stream);
boolean annotationExsits = checkExistingAnnotation(t, annotation, stream);
@@ -102,7 +105,9 @@ public class ContainsCondition extends T
totalCount++;
Type t = type.getType(context, stream);
if (each.beginsWith(t) || stream.getCas().getTypeSystem().subsumes(t, each.getType())) {
- anchorCount += each.getBeginAnchors(t).size();
+ Collection<AnnotationFS> beginAnchors = each.getBeginAnchors(t);
+ anchorCount = incrementAnchorsWithinStrictBoundaries(annotation, anchorCount,
+ beginAnchors);
basicCount++;
} else if (each.isPartOf(t)) {
basicCount++;
@@ -180,6 +185,16 @@ public class ContainsCondition extends T
}
}
+ private int incrementAnchorsWithinStrictBoundaries(AnnotationFS annotation, int anchorCount,
+ Collection<AnnotationFS> beginAnchors) {
+ for (AnnotationFS eachBegin : beginAnchors) {
+ if (eachBegin.getEnd() <= annotation.getEnd()) {
+ anchorCount++;
+ }
+ }
+ return anchorCount;
+ }
+
private boolean checkExistingAnnotation(Type type, AnnotationFS annotation, RutaStream stream) {
int begin = annotation.getBegin();
int end = annotation.getEnd();
Modified: uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/ContainsTest.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/ContainsTest.java?rev=1837129&r1=1837128&r2=1837129&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/ContainsTest.java (original)
+++ uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/ContainsTest.java Tue Jul 31 09:01:01 2018
@@ -72,5 +72,23 @@ public class ContainsTest {
}
+ @Test
+ public void testContainsOverlappingAnnotations() throws ResourceInitializationException,
+ InvalidXMLException, IOException, AnalysisEngineProcessException,
+ ResourceConfigurationException, URISyntaxException {
+ String document = "1 2 3 4 5 6 7 8";
+
+ String script = "(\"1\" # \"5\") {-> T1};";
+ script += "(\"3\" # \"8\") {-> T1};";
+ script += "(\"3\" # \"4\") {-> T1};";
+ script += "(\"3\" # \"5\") {-> T2};";
+ script += "T2{CONTAINS(T1,1,1)-> T3};";
+
+ CAS cas = RutaTestUtils.getCAS(document);
+ Ruta.apply(cas, script);
+
+ RutaTestUtils.assertAnnotationsEquals(cas, 3, 1);
+
+ }
}