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/12/21 11:03:52 UTC

svn commit: r1849458 - in /uima/ruta/trunk/ruta-core/src: main/java/org/apache/uima/ruta/ main/java/org/apache/uima/ruta/rule/quantifier/ test/java/org/apache/uima/ruta/expression/annotation/

Author: pkluegl
Date: Fri Dec 21 11:03:52 2018
New Revision: 1849458

URL: http://svn.apache.org/viewvc?rev=1849458&view=rev
Log:
UIMA-5863: reassign label for removed match

Modified:
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaEnvironment.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/AbstractRuleElementQuantifier.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/MinMaxGreedy.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/MinMaxReluctant.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/PlusGreedy.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/PlusReluctant.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/QuestionGreedy.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/QuestionReluctant.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/StarGreedy.java
    uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaEnvironment.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaEnvironment.java?rev=1849458&r1=1849457&r2=1849458&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaEnvironment.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaEnvironment.java Fri Dec 21 11:03:52 2018
@@ -1117,6 +1117,15 @@ public class RutaEnvironment {
       return;
     }
     List<AnnotationFS> annotations = ruleMatch.getMatchedAnnotationsOfElement(element);
+    addAnnotationsToVariable(annotations, var, context);
+  }
+
+  public void addAnnotationsToVariable(List<AnnotationFS> annotations, String var,
+          MatchContext context) {
+    if (StringUtils.isBlank(var)) {
+      return;
+    }
+
     Class<?> variableType = getVariableType(var);
     if (List.class.equals(variableType) && AnnotationFS.class.equals(getVariableGenericType(var))) {
       setVariableValue(var, annotations);

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/AbstractRuleElementQuantifier.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/AbstractRuleElementQuantifier.java?rev=1849458&r1=1849457&r2=1849458&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/AbstractRuleElementQuantifier.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/AbstractRuleElementQuantifier.java Fri Dec 21 11:03:52 2018
@@ -21,7 +21,12 @@ package org.apache.uima.ruta.rule.quanti
 
 import java.util.List;
 
+import org.apache.commons.lang.StringUtils;
+import org.apache.uima.cas.text.AnnotationFS;
+import org.apache.uima.ruta.RutaEnvironment;
+import org.apache.uima.ruta.RutaStream;
 import org.apache.uima.ruta.rule.ComposedRuleElement;
+import org.apache.uima.ruta.rule.MatchContext;
 import org.apache.uima.ruta.rule.RuleElement;
 import org.apache.uima.ruta.rule.RuleElementContainer;
 import org.apache.uima.ruta.rule.RuleElementMatch;
@@ -54,12 +59,32 @@ public abstract class AbstractRuleElemen
     RuleElement nextElement = null;
     RuleElementContainer container = ruleElement.getContainer();
     RuleElement previousElement = ruleElement;
-    while(nextElement == null && container instanceof ComposedRuleElement) {
+    while (nextElement == null && container instanceof ComposedRuleElement) {
       nextElement = container.getNextElement(after, previousElement);
-      previousElement = ((ComposedRuleElement)container);
-      container = ((ComposedRuleElement)container).getContainer();
+      previousElement = ((ComposedRuleElement) container);
+      container = ((ComposedRuleElement) container).getContainer();
     }
     return nextElement;
   }
-  
+
+  protected void updateLabelAssignment(List<RuleElementMatch> matches, MatchContext context,
+          RutaStream stream) {
+
+    RutaEnvironment environment = context.getParent().getEnvironment();
+    RuleElement ruleElement = context.getElement();
+    String label = ruleElement.getLabel();
+
+    if (matches == null || matches.isEmpty()) {
+      environment.addAnnotationsToVariable(null, label, context);
+      return;
+    }
+
+    if (!StringUtils.isBlank(label)) {
+
+      RuleElementMatch ruleElementMatch = matches.get(matches.size() - 1);
+      List<AnnotationFS> textsMatched = ruleElementMatch.getTextsMatched();
+      environment.addAnnotationsToVariable(textsMatched, label, context);
+    }
+  }
+
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/MinMaxGreedy.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/MinMaxGreedy.java?rev=1849458&r1=1849457&r2=1849458&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/MinMaxGreedy.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/MinMaxGreedy.java Fri Dec 21 11:03:52 2018
@@ -60,6 +60,7 @@ public class MinMaxGreedy extends Abstra
       RuleElementMatch ruleElementMatch = matches.get(matches.size() - 1);
       if (!ruleElementMatch.matched()) {
         matches.remove(ruleElementMatch);
+        updateLabelAssignment(matches, context, stream);
       }
     }
 

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/MinMaxReluctant.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/MinMaxReluctant.java?rev=1849458&r1=1849457&r2=1849458&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/MinMaxReluctant.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/MinMaxReluctant.java Fri Dec 21 11:03:52 2018
@@ -69,6 +69,7 @@ public class MinMaxReluctant extends Abs
       RuleElementMatch ruleElementMatch = matches.get(matches.size() - 1);
       if (!ruleElementMatch.matched()) {
         matches.remove(ruleElementMatch);
+        updateLabelAssignment(matches, context, stream);
       }
     }
     int matchedSize = matches.size();

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/PlusGreedy.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/PlusGreedy.java?rev=1849458&r1=1849457&r2=1849458&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/PlusGreedy.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/PlusGreedy.java Fri Dec 21 11:03:52 2018
@@ -49,6 +49,7 @@ public class PlusGreedy extends Abstract
     }
     if (!result && matches.size() > 1) {
       matches.remove(matches.size() - 1);
+      updateLabelAssignment(matches, context, stream);
       result = true;
     }
     if (matches.size() < 1 || allEmpty) {

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/PlusReluctant.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/PlusReluctant.java?rev=1849458&r1=1849457&r2=1849458&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/PlusReluctant.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/PlusReluctant.java Fri Dec 21 11:03:52 2018
@@ -44,6 +44,7 @@ public class PlusReluctant extends Abstr
     }
     if (!result && matches.size() > 1) {
       matches.remove(matches.size() - 1);
+      updateLabelAssignment(matches, context, stream);
       result = true;
     }
     if (matches.size() < 1 || allEmpty) {
@@ -68,7 +69,7 @@ public class PlusReluctant extends Abstr
     if (ownList == null || ownList.isEmpty()) {
       return true;
     }
-    
+
     RuleElement nextElement = getNextRuleElement(after, ruleElement);
     if (nextElement == null) {
       return false;

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/QuestionGreedy.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/QuestionGreedy.java?rev=1849458&r1=1849457&r2=1849458&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/QuestionGreedy.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/QuestionGreedy.java Fri Dec 21 11:03:52 2018
@@ -40,11 +40,12 @@ public class QuestionGreedy extends Abst
       return Collections.emptyList();
     }
     for (RuleElementMatch match : matches) {
-      result &= match.matched()
-              || (!(match instanceof ComposedRuleElementMatch) && match.getTextsMatched().isEmpty());
+      result &= match.matched() || (!(match instanceof ComposedRuleElementMatch)
+              && match.getTextsMatched().isEmpty());
     }
     if (!result) {
       matches.remove(0);
+      updateLabelAssignment(matches, context, stream);
       result = true;
     }
     if (result) {

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/QuestionReluctant.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/QuestionReluctant.java?rev=1849458&r1=1849457&r2=1849458&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/QuestionReluctant.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/QuestionReluctant.java Fri Dec 21 11:03:52 2018
@@ -41,6 +41,7 @@ public class QuestionReluctant extends A
     }
     if (!result) {
       matches.remove(0);
+      updateLabelAssignment(matches, context, stream);
       result = true;
     }
     if (result) {

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/StarGreedy.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/StarGreedy.java?rev=1849458&r1=1849457&r2=1849458&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/StarGreedy.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/quantifier/StarGreedy.java Fri Dec 21 11:03:52 2018
@@ -42,11 +42,12 @@ public class StarGreedy extends Abstract
       return null;
     }
     for (RuleElementMatch match : matches) {
-      result &= match.matched()
-              || (!(match instanceof ComposedRuleElementMatch) && match.getTextsMatched().isEmpty());
+      result &= match.matched() || (!(match instanceof ComposedRuleElementMatch)
+              && match.getTextsMatched().isEmpty());
     }
     if (!result && matches.size() > 0) {
       matches.remove(matches.size() - 1);
+      updateLabelAssignment(matches, context, stream);
       result = true;
     }
     if (result) {

Modified: uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java?rev=1849458&r1=1849457&r2=1849458&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java (original)
+++ uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java Fri Dec 21 11:03:52 2018
@@ -654,9 +654,9 @@ public class AnnotationLabelExpressionTe
     script += "s1:Struct{IS(PERIOD), s1.a.b -> T8};";
     CAS cas = RutaTestUtils.getCAS(document, typeMap, featureMap);
     Ruta.apply(cas, script);
-    
+
     RutaTestUtils.storeCas(cas, "testStackedReinitLazyFeature");
-    
+
     RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "Some");
     RutaTestUtils.assertAnnotationsEquals(cas, 2, 1, "Some");
     RutaTestUtils.assertAnnotationsEquals(cas, 3, 1, "Some");
@@ -712,4 +712,40 @@ public class AnnotationLabelExpressionTe
     return cas;
   }
 
+  @Test
+  public void testLabelAssignmentInFailedQuantifier() throws Exception {
+
+    String document = "a 1 a a 1 a a 1 a";
+
+    String script = "NUM{-> T1, T2, T3, T4, T7, T8};\n";
+    script += "SW{-> T5, T6};\n";
+
+    script += "ps:T1{-> ps.end = a.end} a:ANY[1,10]{-PARTOF(T1)};\n";
+    script += "a:ANY[1,10]{-PARTOF(T2)} ps:@T2{-> ps.begin = a.begin};\n";
+
+    script += "ps:T3{-> ps.end = a.end} a:ANY+{-PARTOF(T3)};\n";
+    script += "a:ANY+{-PARTOF(T4)} ps:@T4{-> ps.begin = a.begin};\n";
+
+//    script += "ps:T5{-> ps.end = a.end} a:ANY?{-PARTOF(T5)};\n";
+//    script += "a:ANY?{-PARTOF(T6)} ps:@T6{-> ps.begin = a.begin};\n";
+
+//    script += "ps:T7{-> ps.end = a.end} a:ANY*?{-PARTOF(T7)};\n";
+//    script += "a:ANY*?{-PARTOF(T8)} ps:@T8{-> ps.begin = a.begin};\n";
+
+    CAS cas = RutaTestUtils.getCAS(document);
+    Ruta.apply(cas, script);
+
+    RutaTestUtils.assertAnnotationsEquals(cas, 1, 3, "1 a a", "1 a a", "1 a");
+    RutaTestUtils.assertAnnotationsEquals(cas, 2, 3, "a 1", "a a 1", "a a 1");
+
+    RutaTestUtils.assertAnnotationsEquals(cas, 3, 3, "1 a a", "1 a a", "1 a");
+    RutaTestUtils.assertAnnotationsEquals(cas, 4, 3, "a 1", "a a 1", "a a 1");
+
+//    RutaTestUtils.assertAnnotationsEquals(cas, 5, 6, "a 1", "a", "a 1", "a", "a 1", "a");
+//    RutaTestUtils.assertAnnotationsEquals(cas, 6, 6, "a", "1 a", "a", "1 a", "a", "1 a");
+
+//    RutaTestUtils.assertAnnotationsEquals(cas, 7, 3, "1 a a", "1 a a", "1 a");
+//    RutaTestUtils.assertAnnotationsEquals(cas, 8, 3, "a 1", "a a 1", "a a 1");
+  }
+
 }