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 2019/11/05 15:32:43 UTC

svn commit: r1869411 - in /uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule: ComposedRuleElement.java RuleElement.java RutaOptionalRuleElement.java RutaRuleElement.java WildCardRuleElement.java

Author: pkluegl
Date: Tue Nov  5 15:32:43 2019
New Revision: 1869411

URL: http://svn.apache.org/viewvc?rev=1869411&view=rev
Log:
UIMA-6041: refactoring doMath() toward single rule API for later usage in wildcard

Modified:
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElement.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RuleElement.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaOptionalRuleElement.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaRuleElement.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/WildCardRuleElement.java

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElement.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElement.java?rev=1869411&r1=1869410&r2=1869411&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElement.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElement.java Tue Nov  5 15:32:43 2019
@@ -87,10 +87,10 @@ public class ComposedRuleElement extends
         List<RuleMatch> startRuleMatches = each.startMatch(extendedMatch, null, composedMatch, this,
                 stream, crowd);
         for (RuleMatch startRuleMatch : startRuleMatches) {
-          
+
           ComposedRuleElementMatch startElementMatch = (ComposedRuleElementMatch) startRuleMatch
                   .getLastMatch(this, true);
-          
+
           ruleMatches.put(startRuleMatch, startElementMatch);
         }
       }
@@ -108,12 +108,13 @@ public class ComposedRuleElement extends
         RutaRuleElement sideStepOrigin = null;
 
         anchoringRuleElement = updateAnchorForDisjunctMatch(eachComposedMatch, stream);
-        
+
         if (anchoringRuleElement instanceof RutaRuleElement && hasAncestor(false)) {
           sideStepOrigin = (RutaRuleElement) anchoringRuleElement;
         }
         List<RuleMatch> fallbackContinue = fallbackContinue(true, failed, lastAnnotation,
-                eachRuleMatch, ruleApply, eachComposedMatch, sideStepOrigin, entryPoint, stream, crowd);
+                eachRuleMatch, ruleApply, eachComposedMatch, sideStepOrigin, entryPoint, stream,
+                crowd);
         result.addAll(fallbackContinue);
       }
     } else if (conjunct) {
@@ -171,11 +172,12 @@ public class ComposedRuleElement extends
     return result;
   }
 
-  private RuleElement updateAnchorForDisjunctMatch(ComposedRuleElementMatch eachComposedMatch, RutaStream stream) {
-    
+  private RuleElement updateAnchorForDisjunctMatch(ComposedRuleElementMatch eachComposedMatch,
+          RutaStream stream) {
+
     Map<RuleElement, List<RuleElementMatch>> innerMatches = eachComposedMatch.getInnerMatches();
     RuleElement anchoringRuleElement = getAnchoringRuleElement(stream);
-    
+
     for (Entry<RuleElement, List<RuleElementMatch>> match : innerMatches.entrySet()) {
       if (match.getValue() != null) {
         List<RuleElementMatch> matchRuleElements = match.getValue();
@@ -441,7 +443,7 @@ public class ComposedRuleElement extends
           InferenceCrowd crowd) {
     List<RuleMatch> result = new ArrayList<RuleMatch>();
     RuleElementContainer container = getContainer();
-    doMatch(after, containerMatch, ruleMatch, stream, crowd);
+    doMatch(after, annotation, ruleMatch, containerMatch, isStartAnchor(), stream, crowd);
     if (this.equals(entryPoint) && ruleApply == null) {
       result.add(ruleMatch);
     } else if (container == null) {
@@ -566,21 +568,24 @@ public class ComposedRuleElement extends
     }
   }
 
-  private void doMatch(boolean after, ComposedRuleElementMatch match, RuleMatch ruleMatch,
-          RutaStream stream, InferenceCrowd crowd) {
-    List<AnnotationFS> textsMatched = match.getTextsMatched();
+  @Override
+  public void doMatch(boolean after, AnnotationFS annotation, RuleMatch ruleMatch,
+          ComposedRuleElementMatch containerMatch, boolean ruleAnchor, RutaStream stream,
+          InferenceCrowd crowd) {
+
+    List<AnnotationFS> textsMatched = containerMatch.getTextsMatched();
     if (textsMatched == null || textsMatched.isEmpty()) {
       getParent().getEnvironment().addMatchToVariable(ruleMatch, this,
               new MatchContext(getParent()), stream);
-      match.evaluateInnerMatches(true, stream);
+      containerMatch.evaluateInnerMatches(true, stream);
       return;
     }
     int begin = textsMatched.get(0).getBegin();
     int end = textsMatched.get(textsMatched.size() - 1).getEnd();
-    AnnotationFS annotation = stream.getCas().createAnnotation(stream.getCas().getAnnotationType(),
-            begin, end);
+    AnnotationFS implicitAnnotation = stream.getCas()
+            .createAnnotation(stream.getCas().getAnnotationType(), begin, end);
 
-    MatchContext context = new MatchContext(annotation, this, ruleMatch, after);
+    MatchContext context = new MatchContext(implicitAnnotation, this, ruleMatch, after);
     RutaEnvironment environment = context.getParent().getEnvironment();
     environment.addMatchToVariable(ruleMatch, this, context, stream);
 
@@ -595,11 +600,11 @@ public class ComposedRuleElement extends
         break;
       }
     }
-    match.setConditionInfo(evaluatedConditions);
-    match.evaluateInnerMatches(true, stream);
-    if (match.matched()) {
+    containerMatch.setConditionInfo(evaluatedConditions);
+    containerMatch.evaluateInnerMatches(true, stream);
+    if (containerMatch.matched()) {
       boolean inlinedRulesMatched = matchInnerRules(ruleMatch, stream, crowd);
-      match.setInlinedRulesMatched(inlinedRulesMatched);
+      containerMatch.setInlinedRulesMatched(inlinedRulesMatched);
     } else {
       // update label for failed match after evaluating conditions
       environment.removeVariableValue(getLabel(), context);

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RuleElement.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RuleElement.java?rev=1869411&r1=1869410&r2=1869411&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RuleElement.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RuleElement.java Tue Nov  5 15:32:43 2019
@@ -49,6 +49,10 @@ public interface RuleElement {
           RutaRuleElement sideStepOrigin, RuleElement entryPoint, RutaStream stream,
           InferenceCrowd crowd);
 
+  void doMatch(boolean after, AnnotationFS annotation, RuleMatch ruleMatch,
+          ComposedRuleElementMatch containerMatch, boolean ruleAnchor, RutaStream stream,
+          InferenceCrowd crowd);
+
   List<RuleElementMatch> evaluateMatches(List<RuleElementMatch> matches, MatchContext context,
           RutaStream stream);
 
@@ -85,9 +89,9 @@ public interface RuleElement {
   void setLabel(String label);
 
   String getLabel();
-  
+
   List<List<RutaStatement>> getInlinedConditionRuleBlocks();
-  
+
   List<List<RutaStatement>> getInlinedActionRuleBlocks();
 
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaOptionalRuleElement.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaOptionalRuleElement.java?rev=1869411&r1=1869410&r2=1869411&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaOptionalRuleElement.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaOptionalRuleElement.java Tue Nov  5 15:32:43 2019
@@ -57,7 +57,7 @@ public class RutaOptionalRuleElement ext
   }
 
   @Override
-  protected void doMatch(boolean after, AnnotationFS annotation, RuleMatch ruleMatch,
+  public void doMatch(boolean after, AnnotationFS annotation, RuleMatch ruleMatch,
           ComposedRuleElementMatch containerMatch, boolean ruleAnchor, RutaStream stream,
           InferenceCrowd crowd) {
     RuleElementMatch result = new RuleElementMatch(this, containerMatch);

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaRuleElement.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaRuleElement.java?rev=1869411&r1=1869410&r2=1869411&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaRuleElement.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaRuleElement.java Tue Nov  5 15:32:43 2019
@@ -372,7 +372,8 @@ public class RutaRuleElement extends Abs
     return result;
   }
 
-  protected void doMatch(boolean after, AnnotationFS annotation, RuleMatch ruleMatch,
+  @Override
+  public void doMatch(boolean after, AnnotationFS annotation, RuleMatch ruleMatch,
           ComposedRuleElementMatch containerMatch, boolean ruleAnchor, RutaStream stream,
           InferenceCrowd crowd) {
     RuleElementMatch result = new RuleElementMatch(this, containerMatch);

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/WildCardRuleElement.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/WildCardRuleElement.java?rev=1869411&r1=1869410&r2=1869411&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/WildCardRuleElement.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/WildCardRuleElement.java Tue Nov  5 15:32:43 2019
@@ -101,7 +101,7 @@ public class WildCardRuleElement extends
     // what is the next stuff that should match?
     if (nextElement == null) {
       AnnotationFS afs = getCoveredByWildCard(after, annotation, null, stream);
-      doMatch(afs, ruleMatch, containerMatch, annotation == null, stream, crowd);
+      doMatch(after, afs, ruleMatch, containerMatch, annotation == null, stream, crowd);
       ComposedRuleElement composed = (ComposedRuleElement) getContainer();
       // [Peter] was ruleMatch.matched(), but it did not fail when matches?!
       result = composed.fallbackContinue(after, !ruleMatch.matched(), afs, ruleMatch, ruleApply,
@@ -144,8 +144,8 @@ public class WildCardRuleElement extends
       ComposedRuleElementMatch extendedContainerMatch = containerMatch.copy();
       RuleMatch extendedMatch = ruleMatch.copy(extendedContainerMatch, after);
       AnnotationFS coveredByWildCard = getCoveredByWildCard(after, annotation, nextOne, stream);
-      doMatch(coveredByWildCard, extendedMatch, extendedContainerMatch, annotation == null, stream,
-              crowd);
+      doMatch(after, coveredByWildCard, extendedMatch, extendedContainerMatch, annotation == null,
+              stream, crowd);
       if (extendedMatch.matched()) {
         ComposedRuleElementMatch nextContainerMatch = getContainerMatchOfNextElement(
                 extendedContainerMatch, nextDepth);
@@ -325,7 +325,8 @@ public class WildCardRuleElement extends
 
           AnnotationFS coveredByWildCard = getCoveredByWildCard(after, annotation, nextAnchor,
                   stream);
-          doMatch(coveredByWildCard, ruleMatch, containerMatch, annotation == null, stream, crowd);
+          doMatch(after, coveredByWildCard, ruleMatch, containerMatch, annotation == null, stream,
+                  crowd);
           if (ruleMatch.matched()) {
             ComposedRuleElementMatch nextContainerMatch = getContainerMatchOfNextElement(
                     containerMatch, nextDepth);
@@ -366,8 +367,11 @@ public class WildCardRuleElement extends
       RuleMatch extendedMatch = ruleMatch.copy(extendedContainerMatch, after);
 
       AnnotationFS coveredByWildCard = getCoveredByWildCard(after, annotation, nextOne, stream);
-      doMatch(coveredByWildCard, extendedMatch, extendedContainerMatch, annotation == null, stream,
-              crowd);
+      doMatch(after, coveredByWildCard, extendedMatch, extendedContainerMatch, annotation == null,
+              stream, crowd);
+
+      // TODO: UIMA-6041: also doMatch for container conditions for (A #){XYZ} B;
+
       if (extendedMatch.matched()) {
         ComposedRuleElementMatch nextContainerMatch = getContainerMatchOfNextElement(
                 extendedContainerMatch, nextDepth);
@@ -611,8 +615,8 @@ public class WildCardRuleElement extends
       ComposedRuleElementMatch extendedContainerMatch = containerMatch.copy();
       RuleMatch extendedMatch = ruleMatch.copy(extendedContainerMatch, after);
       AnnotationFS coveredByWildCard = getCoveredByWildCard(after, annotation, anchor, stream);
-      doMatch(coveredByWildCard, extendedMatch, extendedContainerMatch, annotation == null, stream,
-              crowd);
+      doMatch(after, coveredByWildCard, extendedMatch, extendedContainerMatch, annotation == null,
+              stream, crowd);
       if (extendedMatch.matched()) {
         ComposedRuleElementMatch nextContainerMatch = getContainerMatchOfNextElement(
                 extendedContainerMatch, nextDepth);
@@ -712,9 +716,11 @@ public class WildCardRuleElement extends
     return afs;
   }
 
-  private void doMatch(AnnotationFS annotation, RuleMatch ruleMatch,
+  @Override
+  public void doMatch(boolean after, AnnotationFS annotation, RuleMatch ruleMatch,
           ComposedRuleElementMatch containerMatch, boolean ruleAnchor, RutaStream stream,
           InferenceCrowd crowd) {
+
     RuleElementMatch result = new RuleElementMatch(this, containerMatch);
     result.setRuleAnchor(ruleAnchor);
     List<EvaluatedCondition> evaluatedConditions = new ArrayList<EvaluatedCondition>(