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");
+ }
+
}