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 2014/09/29 11:00:07 UTC

svn commit: r1628139 - in /uima/ruta/trunk/ruta-core/src: main/java/org/apache/uima/ruta/rule/ComposedRuleElement.java test/java/org/apache/uima/ruta/ConjunctiveRuleElementTest.java

Author: pkluegl
Date: Mon Sep 29 09:00:06 2014
New Revision: 1628139

URL: http://svn.apache.org/r1628139
Log:
UIMA-4022
- remember and forward side step origin for selected start element in conjunctive rule elements

Modified:
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElement.java
    uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/ConjunctiveRuleElementTest.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=1628139&r1=1628138&r2=1628139&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 Mon Sep 29 09:00:06 2014
@@ -106,6 +106,11 @@ public class ComposedRuleElement extends
       // conjunctive
       Map<RuleMatch, ComposedRuleElementMatch> ruleMatches = new HashMap<RuleMatch, ComposedRuleElementMatch>();
       RuleElement anchoringRuleElement = getAnchoringRuleElement(stream);
+      RutaRuleElement sideStepOrigin = null;
+      
+      if (anchoringRuleElement instanceof RutaRuleElement && hasAncestor(false)) {
+        sideStepOrigin = (RutaRuleElement) anchoringRuleElement;
+      }
       ComposedRuleElementMatch composedMatch = createComposedMatch(ruleMatch, containerMatch,
               stream);
       List<RuleMatch> startRuleMatches = anchoringRuleElement.startMatch(ruleMatch, null,
@@ -140,7 +145,8 @@ public class ComposedRuleElement extends
                 parent, stream);
         boolean failed = !eachComposedMatch.matched();
         List<RuleMatch> fallbackContinue = fallbackContinue(true, failed, lastAnnotation,
-                eachRuleMatch, ruleApply, eachComposedMatch, null, entryPoint, stream, crowd);
+                eachRuleMatch, ruleApply, eachComposedMatch, sideStepOrigin, entryPoint, stream,
+                crowd);
         result.addAll(fallbackContinue);
       }
     }

Modified: uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/ConjunctiveRuleElementTest.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/ConjunctiveRuleElementTest.java?rev=1628139&r1=1628138&r2=1628139&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/ConjunctiveRuleElementTest.java (original)
+++ uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/ConjunctiveRuleElementTest.java Mon Sep 29 09:00:06 2014
@@ -38,7 +38,6 @@ import org.junit.Test;
 
 public class ConjunctiveRuleElementTest {
 
-  /*
   @Test
   public void test() {
     String document = "Peter Kluegl, Joern Kottmann, Marshall Schor.";
@@ -69,44 +68,41 @@ public class ConjunctiveRuleElementTest 
     iterator = ai.iterator();
     assertEquals(1, ai.size());
     assertEquals("Peter Kluegl", iterator.next().getCoveredText());
-    
+
     t = RutaTestUtils.getTestType(cas, 3);
     ai = cas.getAnnotationIndex(t);
     iterator = ai.iterator();
     assertEquals(1, ai.size());
     assertEquals("Schor", iterator.next().getCoveredText());
-    
+
     t = RutaTestUtils.getTestType(cas, 4);
     ai = cas.getAnnotationIndex(t);
     iterator = ai.iterator();
     assertEquals(1, ai.size());
     assertEquals("Schor.", iterator.next().getCoveredText());
-    
+
     t = RutaTestUtils.getTestType(cas, 5);
     ai = cas.getAnnotationIndex(t);
     iterator = ai.iterator();
     assertEquals(1, ai.size());
     assertEquals("Marshall Schor", iterator.next().getCoveredText());
-    
+
     if (cas != null) {
       cas.release();
     }
 
   }
-  */
-  
+
   @Test
   public void testWithFeatureMatch() {
-    
-//    DECLARE Annotation Token (STRING posTag, STRING mood, STRING tense);    
+
     String document = "Peter did something.";
     String script = "";
     script += "CW{-> CREATE(Token, \"posTag\" = \"noun\")} SW{-> CREATE(Token, \"posTag\" = \"verb\", \"mood\" = \"p\", \"tense\" = \"p\")} SW;\n";
     script += "(Token.posTag == \"verb\" & Token.mood==\"p\" & Token.tense==\"p\" ){-> T1};\n";
-//    script += "(Token.posTag == \"noun\" @( Token.posTag == \"verb\" & Token.mood==\"p\" & Token.tense==\"p\" )){-> T2};\n";
+    // script +=
     script += "(Token.posTag == \"noun\" ( Token.posTag == \"verb\" & Token.mood==\"p\" & Token.tense==\"p\" )){-> T3};\n";
-    
-    
+
     Map<String, String> typeMap = new TreeMap<String, String>();
     String typeName1 = "Token";
     typeMap.put(typeName1, "uima.tcas.Annotation");
@@ -120,7 +116,7 @@ public class ConjunctiveRuleElementTest 
     list.add(new TestFeature(fn2, "", "uima.cas.String"));
     String fn3 = "tense";
     list.add(new TestFeature(fn3, "", "uima.cas.String"));
-    
+
     CAS cas = null;
     try {
       cas = RutaTestUtils.getCAS(document, typeMap, featureMap);
@@ -139,23 +135,76 @@ public class ConjunctiveRuleElementTest 
     iterator = ai.iterator();
     assertEquals("did", iterator.next().getCoveredText());
 
-//    t = RutaTestUtils.getTestType(cas, 2);
-//    ai = cas.getAnnotationIndex(t);
-//    assertEquals(1, ai.size());
-//    iterator = ai.iterator();
-//    assertEquals("Peter did", iterator.next().getCoveredText());
-    
     t = RutaTestUtils.getTestType(cas, 3);
     ai = cas.getAnnotationIndex(t);
     assertEquals(1, ai.size());
     iterator = ai.iterator();
     assertEquals("Peter did", iterator.next().getCoveredText());
-    
-    
+
     if (cas != null) {
       cas.release();
     }
 
   }
-  
+
+  @Test
+  public void testWithStartAnchor() {
+
+    String document = "Peter did something.";
+    String script = "";
+    script += "CW{-> CREATE(Token, \"posTag\" = \"noun\")} SW{-> CREATE(Token, \"posTag\" = \"verb\", \"mood\" = \"p\", \"tense\" = \"p\")} SW;\n";
+    script += "(Token.posTag == \"noun\" @( Token.posTag == \"verb\" & Token.mood==\"p\" & Token.tense==\"p\" )){-> T1};\n";
+    script += "(Token.posTag == \"noun\" @( Token.posTag == \"verb\" & Token.mood==\"p\" & Token.tense==\"p\" )){-> T2} ANY;\n";
+    script += "Token.posTag == \"noun\" @(Token.posTag == \"verb\" ANY){-> T3};\n";
+
+    Map<String, String> typeMap = new TreeMap<String, String>();
+    String typeName1 = "Token";
+    typeMap.put(typeName1, "uima.tcas.Annotation");
+
+    Map<String, List<TestFeature>> featureMap = new TreeMap<String, List<TestFeature>>();
+    List<TestFeature> list = new ArrayList<RutaTestUtils.TestFeature>();
+    featureMap.put(typeName1, list);
+    String fn1 = "posTag";
+    list.add(new TestFeature(fn1, "", "uima.cas.String"));
+    String fn2 = "mood";
+    list.add(new TestFeature(fn2, "", "uima.cas.String"));
+    String fn3 = "tense";
+    list.add(new TestFeature(fn3, "", "uima.cas.String"));
+
+    CAS cas = null;
+    try {
+      cas = RutaTestUtils.getCAS(document, typeMap, featureMap);
+      Ruta.apply(cas, script);
+    } catch (Exception e) {
+      e.printStackTrace();
+    }
+
+    Type t = null;
+    AnnotationIndex<AnnotationFS> ai = null;
+    FSIterator<AnnotationFS> iterator = null;
+
+    t = RutaTestUtils.getTestType(cas, 1);
+    ai = cas.getAnnotationIndex(t);
+    assertEquals(1, ai.size());
+    iterator = ai.iterator();
+    assertEquals("Peter did", iterator.next().getCoveredText());
+
+    t = RutaTestUtils.getTestType(cas, 2);
+    ai = cas.getAnnotationIndex(t);
+    assertEquals(1, ai.size());
+    iterator = ai.iterator();
+    assertEquals("Peter did", iterator.next().getCoveredText());
+
+    t = RutaTestUtils.getTestType(cas, 3);
+    ai = cas.getAnnotationIndex(t);
+    assertEquals(1, ai.size());
+    iterator = ai.iterator();
+    assertEquals("did something", iterator.next().getCoveredText());
+
+    if (cas != null) {
+      cas.release();
+    }
+
+  }
+
 }