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 2012/11/28 13:39:47 UTC
svn commit: r1414651 - in
/uima/sandbox/trunk/TextMarker/uimaj-textmarker/src:
main/java/org/apache/uima/textmarker/condition/ContextCountCondition.java
test/java/org/apache/uima/textmarker/condition/ContextCountTest.java
Author: pkluegl
Date: Wed Nov 28 12:39:30 2012
New Revision: 1414651
URL: http://svn.apache.org/viewvc?rev=1414651&view=rev
Log:
UIMA-2505
- reimplemented CONTEXTCOUNT condition
- fixed junit test for that condition
Modified:
uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/main/java/org/apache/uima/textmarker/condition/ContextCountCondition.java
uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/test/java/org/apache/uima/textmarker/condition/ContextCountTest.java
Modified: uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/main/java/org/apache/uima/textmarker/condition/ContextCountCondition.java
URL: http://svn.apache.org/viewvc/uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/main/java/org/apache/uima/textmarker/condition/ContextCountCondition.java?rev=1414651&r1=1414650&r2=1414651&view=diff
==============================================================================
--- uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/main/java/org/apache/uima/textmarker/condition/ContextCountCondition.java (original)
+++ uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/main/java/org/apache/uima/textmarker/condition/ContextCountCondition.java Wed Nov 28 12:39:30 2012
@@ -19,8 +19,11 @@
package org.apache.uima.textmarker.condition;
+import java.util.ArrayList;
import java.util.List;
+import java.util.Set;
+import org.apache.uima.cas.Type;
import org.apache.uima.cas.text.AnnotationFS;
import org.apache.uima.textmarker.TextMarkerStream;
import org.apache.uima.textmarker.expression.number.NumberExpression;
@@ -50,32 +53,56 @@ public class ContextCountCondition exten
@Override
public EvaluatedCondition eval(AnnotationFS annotation, RuleElement element,
TextMarkerStream stream, InferenceCrowd crowd) {
- List<TextMarkerBasic> annotationsInWindow = null;
- if (stream.getDocumentAnnotation().getType().equals(type.getType(element.getParent()))) {
- annotationsInWindow = stream.getBasicsInWindow(stream.getDocumentAnnotation());
- } else {
- annotationsInWindow = stream.getAnnotationsOverlappingWindow(annotation);
+ Type contextType = type.getType(element.getParent());
+ stream.moveToFirst();
+ List<AnnotationFS> visibleContexts = new ArrayList<AnnotationFS>();
+ while (stream.isValid()) {
+ TextMarkerBasic each = (TextMarkerBasic) stream.get();
+ if (each.beginsWith(contextType)) {
+ visibleContexts.addAll(each.getBeginAnchors(contextType));
+ }
+ stream.moveToNext();
}
- int counter = 0;
- int count = 0;
- for (TextMarkerBasic eachBasic : annotationsInWindow) {
- if (eachBasic.beginsWith(annotation.getType())
- || stream.getCas().getTypeSystem()
- .subsumes(annotation.getType(), eachBasic.getType())) {
- counter++;
- if (eachBasic.equals(annotation)) {
- count = counter;
- break;
- }
+ List<AnnotationFS> overlappingContexts = new ArrayList<AnnotationFS>();
+ for (AnnotationFS eachContext : visibleContexts) {
+ if (eachContext.getBegin() <= annotation.getBegin()
+ && eachContext.getEnd() >= annotation.getEnd()) {
+ overlappingContexts.add(eachContext);
}
}
- if (var != null) {
- element.getParent().getEnvironment().setVariableValue(var, count);
+ boolean result = false;
+ for (AnnotationFS eachContext : overlappingContexts) {
+ int index = 0;
+ int counter = 0;
+ List<TextMarkerBasic> basicsInWindow = stream.getBasicsInWindow(eachContext);
+ for (TextMarkerBasic eachBasic : basicsInWindow) {
+ Set<AnnotationFS> beginAnchors = eachBasic.getBeginAnchors(annotation.getType());
+ if (beginAnchors != null) {
+ for (AnnotationFS each : beginAnchors) {
+ counter++;
+ if (each.getBegin() == annotation.getBegin()
+ && each.getEnd() == annotation.getEnd()
+ && (each.getType().equals(annotation.getType()) || stream.getCas()
+ .getTypeSystem().subsumes(annotation.getType(), each.getType()))) {
+ index = counter;
+ }
+ }
+ }
+ }
+
+ if (var != null) {
+ element.getParent().getEnvironment().setVariableValue(var, index);
+ }
+ boolean value = index >= min.getIntegerValue(element.getParent())
+ && index <= max.getIntegerValue(element.getParent());
+ result |= value;
+ if (result) {
+ break;
+ }
}
- boolean value = count >= min.getIntegerValue(element.getParent())
- && count <= max.getIntegerValue(element.getParent());
- return new EvaluatedCondition(this, value);
+
+ return new EvaluatedCondition(this, result);
}
public NumberExpression getMin() {
Modified: uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/test/java/org/apache/uima/textmarker/condition/ContextCountTest.java
URL: http://svn.apache.org/viewvc/uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/test/java/org/apache/uima/textmarker/condition/ContextCountTest.java?rev=1414651&r1=1414650&r2=1414651&view=diff
==============================================================================
--- uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/test/java/org/apache/uima/textmarker/condition/ContextCountTest.java (original)
+++ uima/sandbox/trunk/TextMarker/uimaj-textmarker/src/test/java/org/apache/uima/textmarker/condition/ContextCountTest.java Wed Nov 28 12:39:30 2012
@@ -58,11 +58,12 @@ public class ContextCountTest {
t = TextMarkerTestUtils.getTestType(cas, 2);
ai = cas.getAnnotationIndex(t);
- assertEquals(3, ai.size());
+ assertEquals(4, ai.size());
iterator = ai.iterator();
assertEquals("A", iterator.next().getCoveredText());
assertEquals("And", iterator.next().getCoveredText());
assertEquals("Testing", iterator.next().getCoveredText());
+ assertEquals("Text", iterator.next().getCoveredText());
t = TextMarkerTestUtils.getTestType(cas, 3);
ai = cas.getAnnotationIndex(t);
@@ -71,6 +72,6 @@ public class ContextCountTest {
assertEquals("A single sentence." +
"And here is another one." +
"Testing the CONTEXTCOUNT condition of TextMarker.",
- iterator.next().getCoveredText());
+ iterator.next().getCoveredText().replaceAll("[\n\r]", ""));
}
}