Author: pkluegl Date: Wed May 21 12:30:41 2014 New Revision: 1596558 URL: http://svn.apache.org/r1596558 Log: UIMA-3820 - fixed right-to-left matching - added more tests
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElementMatch.java uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/WildCardRuleElement.java uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/MarkInGreedyComposedTest.java Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElementMatch.java URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElementMatch.java?rev=1596558&r1=1596557&r2=1596558&view=diff ============================================================================== --- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElementMatch.java (original) +++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElementMatch.java Wed May 21 12:30:41 2014 @@ -209,12 +209,16 @@ public class ComposedRuleElementMatch ex each.setContainerMatch(copy); // really need to copy all? boolean isCurrentOne = false; - if (after && counter == value.size() - 1) { - isCurrentOne = true; - } - if (!after && counter == 0) { + if (counter == value.size() - 1) { isCurrentOne = true; } + // should not be neccessary because empty matches are listed last + // if (after && counter == value.size() - 1) { + // isCurrentOne = true; + // } + // if (!after && counter == 0) { + // isCurrentOne = true; + // } if (each instanceof ComposedRuleElementMatch && isCurrentOne) { newValue.add(((ComposedRuleElementMatch) each).copy2(extendedContainerMatch, after)); } else { 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=1596558&r1=1596557&r2=1596558&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 Wed May 21 12:30:41 2014 @@ -124,14 +124,11 @@ public class WildCardRuleElement extends AnnotationFS nextOne = annotation; boolean doneHere = false; while (!doneHere && (nextOne = getNextPositionForComposed(cre, after, nextOne, stream)) != null) { -// RutaBasic endAnchor = stream.getEndAnchor(nextOne.getBegin()); -// RutaBasic anchor = stream.getAnchor(!after, nextOne); int pointer = after ? nextOne.getBegin() : nextOne.getEnd(); RutaBasic anchor = stream.getAnchor(!after, pointer); 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); if (extendedMatch.matched()) { Modified: uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/MarkInGreedyComposedTest.java URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/MarkInGreedyComposedTest.java?rev=1596558&r1=1596557&r2=1596558&view=diff ============================================================================== --- uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/MarkInGreedyComposedTest.java (original) +++ uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/MarkInGreedyComposedTest.java Wed May 21 12:30:41 2014 @@ -33,37 +33,65 @@ import org.junit.Test; public class MarkInGreedyComposedTest { -// @Test -// public void testWildCardFollowedByComposedReversed() { -// String document = "1 x f B e d B x c A b a A 1"; -// String script = ""; -// script += "( ( (SW{REGEXP(\"x\")} SW ) #) {-> T1} )+ @NUM;"; -// CAS cas = null; -// try { -// cas = RutaTestUtils.getCAS(document); -// 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); -// iterator = ai.iterator(); -//// for (AnnotationFS a : ai) { -//// System.out.println(a.getCoveredText()); -//// } -// assertEquals(2, ai.size()); -// assertEquals("x f B e d B", iterator.next().getCoveredText()); -// assertEquals("x c A b a A", iterator.next().getCoveredText()); -// -// if (cas != null) { -// cas.release(); -// } -// } + + @Test + public void testWildCardFollowedByComposedReversed() { + String document = "1 x f B e d B x c A b a A 1"; + String script = ""; + script += "( ( (SW{REGEXP(\"x\")} SW ) #) {-> T1} )+ @NUM;"; + CAS cas = null; + try { + cas = RutaTestUtils.getCAS(document); + 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); + iterator = ai.iterator(); + assertEquals(2, ai.size()); + assertEquals("x f B e d B", iterator.next().getCoveredText()); + assertEquals("x c A b a A", iterator.next().getCoveredText()); + + if (cas != null) { + cas.release(); + } + } + + @Test + public void testSimpleFollowedByComposedReversed() { + String document = "1 x f B x c A 1"; + String script = ""; + script += "( ( (SW{REGEXP(\"x\")} SW ) CW) {-> T1} )+ @NUM;"; + CAS cas = null; + try { + cas = RutaTestUtils.getCAS(document); + 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); + iterator = ai.iterator(); + assertEquals(2, ai.size()); + assertEquals("x f B", iterator.next().getCoveredText()); + assertEquals("x c A", iterator.next().getCoveredText()); + + if (cas != null) { + cas.release(); + } + } + @Test public void testWildCardFollowedByComposed() {