Author: pkluegl
Date: Tue Nov 12 16:31:58 2019
New Revision: 1869706
URL: http://svn.apache.org/viewvc?rev=1869706&view=rev
Log:
UIMA-6041: doMatch() also for parent elements according to depth to next element
Modified:
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/rule/WildCard2Test.java
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=1869706&r1=1869705&r2=1869706&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 12 16:31:58 2019
@@ -145,6 +145,8 @@ public class WildCardRuleElement extends
AnnotationFS coveredByWildCard = getCoveredByWildCard(after, annotation,
nextOne, stream);
doMatch(after, coveredByWildCard, extendedMatch, extendedContainerMatch,
annotation == null,
stream, crowd);
+ doMatchPotentialParentElements(after, annotation, nextDepth,
extendedMatch,
+ extendedContainerMatch, coveredByWildCard, stream, crowd);
if (extendedMatch.matched()) {
ComposedRuleElementMatch nextContainerMatch =
getContainerMatchOfNextElement(
extendedContainerMatch, nextDepth);
@@ -369,7 +371,8 @@ public class WildCardRuleElement extends
doMatch(after, coveredByWildCard, extendedMatch, extendedContainerMatch,
annotation == null,
stream, crowd);
- // TODO: UIMA-6041: also doMatch for container conditions for (A #){XYZ}
B;
+ doMatchPotentialParentElements(after, annotation, nextDepth,
extendedMatch,
+ extendedContainerMatch, coveredByWildCard, stream, crowd);
if (extendedMatch.matched()) {
ComposedRuleElementMatch nextContainerMatch =
getContainerMatchOfNextElement(
@@ -399,6 +402,22 @@ public class WildCardRuleElement extends
return result;
}
+ private void doMatchPotentialParentElements(boolean after, AnnotationFS
annotation, int nextDepth,
+ RuleMatch extendedMatch, ComposedRuleElementMatch
extendedContainerMatch,
+ AnnotationFS coveredByWildCard, RutaStream stream, InferenceCrowd
crowd) {
+ RuleElement element = this;
+ for (int i = nextDepth; i > 0; i--) {
+ // UIMA-6041: also doMatch for container conditions like (A #){XYZ} B;
+ RuleElementContainer c = element.getContainer();
+ if (c instanceof ComposedRuleElement) {
+ ComposedRuleElement cre = (ComposedRuleElement) c;
+ cre.doMatch(after, coveredByWildCard, extendedMatch,
+ extendedContainerMatch.getContainerMatch(), annotation ==
null, stream, crowd);
+ element = cre;
+ }
+ }
+ }
+
private AnnotationFS getNextAnchor(boolean after, AnnotationFS annotation,
RuleElement nextElement, RuleMatch ruleMatch,
ComposedRuleElementMatch containerMatch,
RuleElement sideStepOrigin, RutaStream stream, InferenceCrowd crowd)
{
@@ -616,6 +635,8 @@ public class WildCardRuleElement extends
AnnotationFS coveredByWildCard = getCoveredByWildCard(after, annotation,
anchor, stream);
doMatch(after, coveredByWildCard, extendedMatch, extendedContainerMatch,
annotation == null,
stream, crowd);
+ doMatchPotentialParentElements(after, annotation, nextDepth,
extendedMatch,
+ extendedContainerMatch, coveredByWildCard, stream, crowd);
if (extendedMatch.matched()) {
ComposedRuleElementMatch nextContainerMatch =
getContainerMatchOfNextElement(
extendedContainerMatch, nextDepth);
Modified:
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/rule/WildCard2Test.java
URL:
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/rule/WildCard2Test.java?rev=1869706&r1=1869705&r2=1869706&view=diff
==============================================================================
---
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/rule/WildCard2Test.java
(original)
+++
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/rule/WildCard2Test.java
Tue Nov 12 16:31:58 2019
@@ -29,7 +29,6 @@ import org.apache.uima.ruta.engine.Ruta;
import org.apache.uima.ruta.engine.RutaTestUtils;
import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
import org.junit.Assert;
-import org.junit.Ignore;
import org.junit.Test;
public class WildCard2Test {
@@ -196,15 +195,26 @@ public class WildCard2Test {
}
@Test
- @Ignore
public void testConditionAtComposedWithWildcard() throws Exception {
- String document = "1 a b c 2 d e f 3";
+ String document = "1 A a , 2 D d . 3";
String script = "(NUM #){CONTAINS(CAP)->T1} NUM;";
+ script += "((NUM #){CONTAINS(COMMA)}){CONTAINS(PERIOD)-> T2} NUM;";
+ script += "((NUM #){CONTAINS(SW)}){CONTAINS(PERIOD)-> T3} NUM;";
+ script += "(NUM #){CONTAINS(CAP)->T4} (NUM);";
+ script += "((NUM #){CONTAINS(CAP)->T5}) ((NUM));";
+ script += "((NUM #){CONTAINS(CAP)->T6}) \"2\";";
+ script += "((NUM #){CONTAINS(CAP)->T7}) \"3\";";
CAS cas = RutaTestUtils.getCAS(document);
Ruta.apply(cas, script);
RutaTestUtils.assertAnnotationsEquals(cas, 1, 0);
+ RutaTestUtils.assertAnnotationsEquals(cas, 2, 0);
+ RutaTestUtils.assertAnnotationsEquals(cas, 3, 1, "2 D d .");
+ RutaTestUtils.assertAnnotationsEquals(cas, 4, 0);
+ RutaTestUtils.assertAnnotationsEquals(cas, 5, 0);
+ RutaTestUtils.assertAnnotationsEquals(cas, 6, 0);
+ RutaTestUtils.assertAnnotationsEquals(cas, 7, 0);
}
@Test