Author: pkluegl Date: Wed Mar 5 10:18:44 2014 New Revision: 1574412 URL: http://svn.apache.org/r1574412 Log: UIMA-3666 - allow additional argument in INLIST - fixed documentation
Added: uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/output/ uima/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/output/ Modified: uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ConditionFactory.java uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/InListCondition.java uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ConditionVerbalizer.java uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ConditionVerbalizerTest.java uima/ruta/trunk/ruta-docbook/src/docbook/tools.ruta.language.conditions.xml uima/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g Modified: uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g?rev=1574412&r1=1574411&r2=1574412&view=diff ============================================================================== --- uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g (original) +++ uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g Wed Mar 5 10:18:44 2014 @@ -1196,14 +1196,18 @@ conditionCurrentCount returns [AbstractR (COMMA var = numberVariable)? RPAREN {cond = ConditionFactory.createConditionCurrentCount(type, min, max, var,$blockDeclaration::env);} ; + conditionInList returns [AbstractRutaCondition cond = null] options { backtrack = true; } : - INLIST LPAREN ((list2 = stringListExpression)=>list2 = stringListExpression | list1 = wordListExpression) (COMMA dist = numberExpression (COMMA rel = booleanExpression)?)? RPAREN - {if(list1 != null) {cond = ConditionFactory.createConditionInList(list1, dist, rel,$blockDeclaration::env);} - else {cond = ConditionFactory.createConditionInList(list2, dist, rel,$blockDeclaration::env);};} + INLIST LPAREN ((list2 = stringListExpression)=>list2 = stringListExpression | list1 = wordListExpression) + (COMMA arg = stringExpression)? + //(COMMA dist = numberExpression (COMMA rel = booleanExpression)?)? + RPAREN + {if(list1 != null) {cond = ConditionFactory.createConditionInList(list1, arg,$blockDeclaration::env);} + else {cond = ConditionFactory.createConditionInList(list2, arg,$blockDeclaration::env);};} ; Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ConditionFactory.java URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ConditionFactory.java?rev=1574412&r1=1574411&r2=1574412&view=diff ============================================================================== --- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ConditionFactory.java (original) +++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ConditionFactory.java Wed Mar 5 10:18:44 2014 @@ -95,8 +95,8 @@ public class ConditionFactory { } public static AbstractRutaCondition createConditionInList(WordListExpression listExpr, - INumberExpression dist, IBooleanExpression rel, RutaBlock parent) { - return new InListCondition(listExpr, dist, rel); + IStringExpression arg, RutaBlock parent) { + return new InListCondition(listExpr, arg); } public static AbstractRutaCondition createConditionMOfN(List<AbstractRutaCondition> conds, @@ -237,8 +237,8 @@ public class ConditionFactory { } public static AbstractRutaCondition createConditionInList(StringListExpression list, - INumberExpression dist, IBooleanExpression rel, RutaBlock env) { - return new InListCondition(list, dist, rel); + IStringExpression arg, RutaBlock env) { + return new InListCondition(list, arg); } public static AbstractRutaCondition createConditionCount(ListExpression<Object> type, Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/InListCondition.java URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/InListCondition.java?rev=1574412&r1=1574411&r2=1574412&view=diff ============================================================================== --- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/InListCondition.java (original) +++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/InListCondition.java Wed Mar 5 10:18:44 2014 @@ -23,10 +23,9 @@ import java.util.List; import org.apache.uima.cas.text.AnnotationFS; import org.apache.uima.ruta.RutaStream; -import org.apache.uima.ruta.expression.bool.IBooleanExpression; import org.apache.uima.ruta.expression.list.StringListExpression; -import org.apache.uima.ruta.expression.number.INumberExpression; import org.apache.uima.ruta.expression.resource.WordListExpression; +import org.apache.uima.ruta.expression.string.IStringExpression; import org.apache.uima.ruta.resource.RutaWordList; import org.apache.uima.ruta.rule.EvaluatedCondition; import org.apache.uima.ruta.rule.RuleElement; @@ -34,51 +33,40 @@ import org.apache.uima.ruta.visitor.Infe public class InListCondition extends TerminalRutaCondition { - private IBooleanExpression relative; - - private final INumberExpression distance; - private WordListExpression listExpr; private StringListExpression stringList; - public InListCondition(WordListExpression listExpr, INumberExpression distance, - IBooleanExpression relative) { + private IStringExpression arg; + + public InListCondition(WordListExpression listExpr, IStringExpression arg) { super(); this.listExpr = listExpr; - this.distance = distance; - this.relative = relative; + this.arg = arg; } - public InListCondition(StringListExpression list, INumberExpression distance, - IBooleanExpression relative) { + public InListCondition(StringListExpression list, IStringExpression arg) { super(); - this.distance = distance; - this.relative = relative; this.stringList = list; + this.arg = arg; } @Override public EvaluatedCondition eval(AnnotationFS annotation, RuleElement element, RutaStream stream, InferenceCrowd crowd) { - String coveredText = annotation.getCoveredText(); + String text = annotation.getCoveredText(); + if(arg != null) { + text = arg.getStringValue(element.getParent(), annotation, stream); + } if (stringList == null) { RutaWordList wordList = listExpr.getList(element.getParent()); - return new EvaluatedCondition(this, wordList.contains(coveredText, false, 0, null, 0, true)); + return new EvaluatedCondition(this, wordList.contains(text, false, 0, null, 0, true)); } List<String> sList = stringList.getList(element.getParent(), stream); - boolean contains = sList.contains(coveredText); + boolean contains = sList.contains(text); return new EvaluatedCondition(this, contains); } - public IBooleanExpression getRelative() { - return relative; - } - - public INumberExpression getDistance() { - return distance; - } - public WordListExpression getListExpression() { return listExpr; } @@ -87,4 +75,8 @@ public class InListCondition extends Ter return stringList; } + public IStringExpression getArg() { + return arg; + } + } Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ConditionVerbalizer.java URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ConditionVerbalizer.java?rev=1574412&r1=1574411&r2=1574412&view=diff ============================================================================== --- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ConditionVerbalizer.java (original) +++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ConditionVerbalizer.java Wed Mar 5 10:18:44 2014 @@ -226,16 +226,12 @@ public class ConditionVerbalizer { } else { list = verbalizer.verbalize(c.getStringList()); } - INumberExpression distE = c.getDistance(); - String dist = ""; - String rel = ""; - if (distE != null) { - dist = ", " + verbalizer.verbalize(distE); - } - if (c.getRelative() != null) { - rel = ", " + verbalizer.verbalize(c.getRelative()); + IStringExpression a = c.getArg(); + String arg = ""; + if (a != null) { + arg = ", " + verbalizer.verbalize(a); } - return name + list + dist + rel + ")"; + return name + list +arg + ")"; } else if (condition instanceof LastCondition) { LastCondition c = (LastCondition) condition; return name + verbalizer.verbalize(c.getType()) + ")"; Modified: uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ConditionVerbalizerTest.java URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ConditionVerbalizerTest.java?rev=1574412&r1=1574411&r2=1574412&view=diff ============================================================================== --- uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ConditionVerbalizerTest.java (original) +++ uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/verbalizer/ConditionVerbalizerTest.java Wed Mar 5 10:18:44 2014 @@ -180,9 +180,9 @@ public class ConditionVerbalizerTest { assertEquals("IF(true)", s); // INLIST - c = new InListCondition(stringListExpr, numExpr1, boolExpr1); + c = new InListCondition(stringListExpr, stringExpr); s = v.verbalize(c); - assertEquals("INLIST({\"string\"}, 4, true)", s); + assertEquals("INLIST({\"string\"}, \"string\")", s); // IS c = new IsCondition(typeExpr1); Modified: uima/ruta/trunk/ruta-docbook/src/docbook/tools.ruta.language.conditions.xml URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-docbook/src/docbook/tools.ruta.language.conditions.xml?rev=1574412&r1=1574411&r2=1574412&view=diff ============================================================================== --- uima/ruta/trunk/ruta-docbook/src/docbook/tools.ruta.language.conditions.xml (original) +++ uima/ruta/trunk/ruta-docbook/src/docbook/tools.ruta.language.conditions.xml Wed Mar 5 10:18:44 2014 @@ -383,20 +383,18 @@ <title>INLIST</title> <para> The INLIST condition is fulfilled, if the matched annotation is listed - in a given word or string list. The (relative) edit distance - is currently disabled. - <!-- ATTENTION: it seems the edit distance is still disabled? what does - this mean? --> + in a given word or string list. If an optional agrument is given, then + the value of the argument is used instead of the covered text of the matched annotation </para> <section> <title> <emphasis role="bold">Definition:</emphasis> </title> <para> - <programlisting><![CDATA[INLIST(WordList(,NumberExpression,(BooleanExpression)?)?) ]]></programlisting> + <programlisting><![CDATA[INLIST(WordList(,StringExpression)?) ]]></programlisting> </para> <para> - <programlisting><![CDATA[INLIST(StringList(,NumberExpression,(BooleanExpression)?)?) ]]></programlisting> + <programlisting><![CDATA[INLIST(StringList(,StringExpression)?) ]]></programlisting> </para> </section> <section> @@ -404,12 +402,19 @@ <emphasis role="bold">Example:</emphasis> </title> <para> - <programlisting><![CDATA[Keyword{INLIST(specialKeywords.txt)->MARK(SpecialKeyword)};]]></programlisting> + <programlisting><![CDATA[Keyword{INLIST(SpecialKeywordList)->MARK(SpecialKeyword)};]]></programlisting> </para> <para> A Keyword is annotated with the type SpecialKeyword, if the text - of the Keyword annotation is listed in the word list - 'specialKeywords.txt'. + of the Keyword annotation is listed in the word list or string list + SpecialKeywordList. + </para> + <para> + <programlisting><![CDATA[Token{INLIST(MyLemmaList, Token.lemma)->MARK(SpecialLemma)};]]></programlisting> + </para> + <para> + This rule creates an annotation of the type SpecialLemma for each token that provides a feature value + of the feature "lemma" that is present in the string list or word list MyLemmaList. </para> </section> </section> Modified: uima/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g?rev=1574412&r1=1574411&r2=1574412&view=diff ============================================================================== --- uima/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g (original) +++ uima/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g Wed Mar 5 10:18:44 2014 @@ -1174,9 +1174,10 @@ conditionInList returns [RutaCondition c } : name = INLIST LPAREN ((list2 = stringListExpression)=>list2 = stringListExpression | list1 = wordListExpression) - (COMMA dist = numberExpression (COMMA rel = booleanExpression)?)? - {if(list1 != null) {cond = ConditionFactory.createCondition(name, list1, dist, rel);} - else {cond = ConditionFactory.createCondition(name, list2, dist, rel);};} + (COMMA arg = stringExpression)? + //(COMMA dist = numberExpression (COMMA rel = booleanExpression)?)? + {if(list1 != null) {cond = ConditionFactory.createCondition(name, list1, arg);} + else {cond = ConditionFactory.createCondition(name, list2, arg);};} RPAREN ;