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 2013/06/08 20:01:12 UTC
svn commit: r1491023 - in /uima/sandbox/ruta/trunk/ruta-core/src:
main/java/org/apache/uima/ruta/ main/java/org/apache/uima/ruta/engine/
main/java/org/apache/uima/ruta/rule/ main/java/org/apache/uima/ruta/type/
main/resources/org/apache/uima/ruta/engin...
Author: pkluegl
Date: Sat Jun 8 18:01:10 2013
New Revision: 1491023
URL: http://svn.apache.org/r1491023
Log:
UIMA-2980
- added optional annotations, which will be filtered by rule match
Added:
uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/type/RutaOptional.java
uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/type/RutaOptional_Type.java
Modified:
uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java
uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/RutaEngine.java
uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RuleMatch.java
uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/WildCardRuleElement.java
uima/sandbox/ruta/trunk/ruta-core/src/main/resources/org/apache/uima/ruta/engine/InternalTypeSystem.xml
uima/sandbox/ruta/trunk/ruta-core/src/test/resources/org/apache/uima/ruta/InternalTypeSystem.xml
Modified: uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java
URL: http://svn.apache.org/viewvc/uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java?rev=1491023&r1=1491022&r2=1491023&view=diff
==============================================================================
--- uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java (original)
+++ uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java Sat Jun 8 18:01:10 2013
@@ -199,10 +199,7 @@ public class RutaStream extends FSIterat
public void addAnnotation(AnnotationFS annotation, boolean addToIndex,
AbstractRuleMatch<? extends AbstractRule> creator) {
- if (addToIndex) {
- cas.addFsToIndexes(annotation);
- }
- addAnnotation(annotation, creator);
+ addAnnotation(annotation, true, true, creator);
}
public void addAnnotation(AnnotationFS annotation,
@@ -233,6 +230,7 @@ public class RutaStream extends FSIterat
crowd.annotationAdded(annotation, creator);
}
+
private boolean checkSpan(AnnotationFS annotation) {
boolean result = false;
int begin = annotation.getBegin();
Modified: uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/RutaEngine.java
URL: http://svn.apache.org/viewvc/uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/RutaEngine.java?rev=1491023&r1=1491022&r2=1491023&view=diff
==============================================================================
--- uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/RutaEngine.java (original)
+++ uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/RutaEngine.java Sat Jun 8 18:01:10 2013
@@ -85,6 +85,8 @@ public class RutaEngine extends JCasAnno
public static final String BASIC_TYPE = "org.apache.uima.ruta.type.RutaBasic";
+ public static final String OPTIONAL_TYPE = "org.apache.uima.ruta.type.RutaOptional";
+
public static final String SEEDERS = "seeders";
public static final String REMOVE_BASICS = "removeBasics";
@@ -131,6 +133,8 @@ public class RutaEngine extends JCasAnno
public static final String SIMPLE_GREEDY_FOR_COMPOSED = "simpleGreedyForComposed";
+
+
private String[] seeders;
private Boolean createDebugInfo;
Modified: uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RuleMatch.java
URL: http://svn.apache.org/viewvc/uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RuleMatch.java?rev=1491023&r1=1491022&r2=1491023&view=diff
==============================================================================
--- uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RuleMatch.java (original)
+++ uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RuleMatch.java Sat Jun 8 18:01:10 2013
@@ -32,6 +32,7 @@ import org.apache.uima.cas.text.Annotati
import org.apache.uima.ruta.RutaStream;
import org.apache.uima.ruta.ScriptApply;
import org.apache.uima.ruta.action.AbstractRutaAction;
+import org.apache.uima.ruta.engine.RutaEngine;
public class RuleMatch extends AbstractRuleMatch<RutaRule> {
@@ -150,10 +151,16 @@ public class RuleMatch extends AbstractR
for (RuleElementMatch ruleElementMatch : list2) {
List<AnnotationFS> textsMatched = ruleElementMatch.getTextsMatched();
if (textsMatched != null && !textsMatched.isEmpty()) {
- begin = Math.min(textsMatched.get(0).getBegin(), begin);
- end = Math.max(textsMatched.get(textsMatched.size() - 1).getEnd(), end);
- if (cas == null) {
- cas = textsMatched.get(0).getCAS();
+ AnnotationFS first = getFirstNormal(textsMatched);
+ if (first != null) {
+ begin = Math.min(first.getBegin(), begin);
+ }
+ AnnotationFS last = getLastNormal(textsMatched);
+ if (last != null) {
+ end = Math.max(last.getEnd(), end);
+ }
+ if (cas == null && first != null) {
+ cas = first.getCAS();
}
}
}
@@ -167,6 +174,34 @@ public class RuleMatch extends AbstractR
return result;
}
+ private AnnotationFS getFirstNormal(List<AnnotationFS> textsMatched) {
+ // hotfix for invisible dummy matches
+ int pointer = 0;
+ AnnotationFS annotationFS = null;
+ while (pointer < textsMatched.size() && (annotationFS = textsMatched.get(pointer)) != null
+ && annotationFS.getType().getName().equals(RutaEngine.OPTIONAL_TYPE)) {
+ pointer++;
+ }
+ if (pointer < textsMatched.size()) {
+ return annotationFS;
+ }
+ return null;
+ }
+
+ private AnnotationFS getLastNormal(List<AnnotationFS> textsMatched) {
+ // hotfix for invisible dummy matches
+ int pointer = textsMatched.size() - 1;
+ AnnotationFS annotationFS = null;
+ while (pointer >= 0 && (annotationFS = textsMatched.get(pointer)) != null
+ && annotationFS.getType().getName().equals(RutaEngine.OPTIONAL_TYPE)) {
+ pointer--;
+ }
+ if (pointer >= 0) {
+ return annotationFS;
+ }
+ return null;
+ }
+
public static List<Integer> extendIndexes(List<Integer> indexes) {
if (indexes == null || indexes.size() <= 1) {
return indexes;
Modified: uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/WildCardRuleElement.java
URL: http://svn.apache.org/viewvc/uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/WildCardRuleElement.java?rev=1491023&r1=1491022&r2=1491023&view=diff
==============================================================================
--- uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/WildCardRuleElement.java (original)
+++ uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/WildCardRuleElement.java Sat Jun 8 18:01:10 2013
@@ -36,6 +36,7 @@ import org.apache.uima.ruta.RutaBlock;
import org.apache.uima.ruta.RutaStream;
import org.apache.uima.ruta.action.AbstractRutaAction;
import org.apache.uima.ruta.condition.AbstractRutaCondition;
+import org.apache.uima.ruta.engine.RutaEngine;
import org.apache.uima.ruta.expression.string.StringExpression;
import org.apache.uima.ruta.type.RutaBasic;
import org.apache.uima.ruta.type.RutaFrame;
@@ -443,23 +444,30 @@ public class WildCardRuleElement extends
end = later.getBegin();
}
+ int filteredBegin = begin;
+ int filteredEnd = end;
RutaBasic beginAnchor = stream.getBeginAnchor(begin);
RutaBasic endAnchor = stream.getEndAnchor(end);
if (beginAnchor != null && !stream.isVisible(beginAnchor)) {
beginAnchor = stream.getBasicNextTo(false, beginAnchor);
- if(beginAnchor != null) {
- begin = beginAnchor.getBegin();
+ if (beginAnchor != null) {
+ filteredBegin = beginAnchor.getBegin();
}
}
if (endAnchor != null && !stream.isVisible(endAnchor)) {
endAnchor = stream.getBasicNextTo(true, endAnchor);
- if(endAnchor != null) {
- end = endAnchor.getEnd();
+ if (endAnchor != null) {
+ filteredEnd = endAnchor.getEnd();
}
}
+ if(filteredBegin < filteredEnd) {
+ begin = filteredBegin;
+ end = filteredEnd;
+ } else {
+ type = cas.getTypeSystem().getType(RutaEngine.OPTIONAL_TYPE);
+ }
AnnotationFS afs = cas.createAnnotation(type, begin, end);
-
return afs;
}
Added: uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/type/RutaOptional.java
URL: http://svn.apache.org/viewvc/uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/type/RutaOptional.java?rev=1491023&view=auto
==============================================================================
--- uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/type/RutaOptional.java (added)
+++ uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/type/RutaOptional.java Sat Jun 8 18:01:10 2013
@@ -0,0 +1,65 @@
+
+
+/* First created by JCasGen Sat Jun 08 19:25:02 CEST 2013 */
+package org.apache.uima.ruta.type;
+
+import org.apache.uima.jcas.JCas;
+import org.apache.uima.jcas.JCasRegistry;
+import org.apache.uima.jcas.cas.TOP_Type;
+
+import org.apache.uima.jcas.tcas.Annotation;
+
+
+/**
+ * Updated by JCasGen Sat Jun 08 19:25:02 CEST 2013
+ * XML source: D:/work/workspace-tmb5/ruta/ruta-core/src/main/resources/org/apache/uima/ruta/engine/InternalTypeSystem.xml
+ * @generated */
+public class RutaOptional extends Annotation {
+ /** @generated
+ * @ordered
+ */
+ @SuppressWarnings ("hiding")
+ public final static int typeIndexID = JCasRegistry.register(RutaOptional.class);
+ /** @generated
+ * @ordered
+ */
+ @SuppressWarnings ("hiding")
+ public final static int type = typeIndexID;
+ /** @generated */
+ @Override
+ public int getTypeIndexID() {return typeIndexID;}
+
+ /** Never called. Disable default constructor
+ * @generated */
+ protected RutaOptional() {/* intentionally empty block */}
+
+ /** Internal - constructor used by generator
+ * @generated */
+ public RutaOptional(int addr, TOP_Type type) {
+ super(addr, type);
+ readObject();
+ }
+
+ /** @generated */
+ public RutaOptional(JCas jcas) {
+ super(jcas);
+ readObject();
+ }
+
+ /** @generated */
+ public RutaOptional(JCas jcas, int begin, int end) {
+ super(jcas);
+ setBegin(begin);
+ setEnd(end);
+ readObject();
+ }
+
+ /** <!-- begin-user-doc -->
+ * Write your own initialization here
+ * <!-- end-user-doc -->
+ @generated modifiable */
+ private void readObject() {/*default - does nothing empty block */}
+
+}
+
+
\ No newline at end of file
Added: uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/type/RutaOptional_Type.java
URL: http://svn.apache.org/viewvc/uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/type/RutaOptional_Type.java?rev=1491023&view=auto
==============================================================================
--- uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/type/RutaOptional_Type.java (added)
+++ uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/type/RutaOptional_Type.java Sat Jun 8 18:01:10 2013
@@ -0,0 +1,58 @@
+
+/* First created by JCasGen Sat Jun 08 19:25:02 CEST 2013 */
+package org.apache.uima.ruta.type;
+
+import org.apache.uima.jcas.JCas;
+import org.apache.uima.jcas.JCasRegistry;
+import org.apache.uima.cas.impl.CASImpl;
+import org.apache.uima.cas.impl.FSGenerator;
+import org.apache.uima.cas.FeatureStructure;
+import org.apache.uima.cas.impl.TypeImpl;
+import org.apache.uima.cas.Type;
+import org.apache.uima.jcas.tcas.Annotation_Type;
+
+/**
+ * Updated by JCasGen Sat Jun 08 19:25:02 CEST 2013
+ * @generated */
+public class RutaOptional_Type extends Annotation_Type {
+ /** @generated */
+ @Override
+ protected FSGenerator getFSGenerator() {return fsGenerator;}
+ /** @generated */
+ private final FSGenerator fsGenerator =
+ new FSGenerator() {
+ public FeatureStructure createFS(int addr, CASImpl cas) {
+ if (RutaOptional_Type.this.useExistingInstance) {
+ // Return eq fs instance if already created
+ FeatureStructure fs = RutaOptional_Type.this.jcas.getJfsFromCaddr(addr);
+ if (null == fs) {
+ fs = new RutaOptional(addr, RutaOptional_Type.this);
+ RutaOptional_Type.this.jcas.putJfsFromCaddr(addr, fs);
+ return fs;
+ }
+ return fs;
+ } else return new RutaOptional(addr, RutaOptional_Type.this);
+ }
+ };
+ /** @generated */
+ @SuppressWarnings ("hiding")
+ public final static int typeIndexID = RutaOptional.typeIndexID;
+ /** @generated
+ @modifiable */
+ @SuppressWarnings ("hiding")
+ public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.ruta.type.RutaOptional");
+
+
+
+ /** initialize variables to correspond with Cas Type and Features
+ * @generated */
+ public RutaOptional_Type(JCas jcas, Type casType) {
+ super(jcas, casType);
+ casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator());
+
+ }
+}
+
+
+
+
\ No newline at end of file
Modified: uima/sandbox/ruta/trunk/ruta-core/src/main/resources/org/apache/uima/ruta/engine/InternalTypeSystem.xml
URL: http://svn.apache.org/viewvc/uima/sandbox/ruta/trunk/ruta-core/src/main/resources/org/apache/uima/ruta/engine/InternalTypeSystem.xml?rev=1491023&r1=1491022&r2=1491023&view=diff
==============================================================================
--- uima/sandbox/ruta/trunk/ruta-core/src/main/resources/org/apache/uima/ruta/engine/InternalTypeSystem.xml (original)
+++ uima/sandbox/ruta/trunk/ruta-core/src/main/resources/org/apache/uima/ruta/engine/InternalTypeSystem.xml Sat Jun 8 18:01:10 2013
@@ -37,6 +37,11 @@
</features>
</typeDescription>
<typeDescription>
+ <name>org.apache.uima.ruta.type.RutaOptional</name>
+ <description/>
+ <supertypeName>uima.tcas.Annotation</supertypeName>
+ </typeDescription>
+ <typeDescription>
<name>org.apache.uima.ruta.type.RutaAnnotation</name>
<description/>
<supertypeName>uima.tcas.Annotation</supertypeName>
Modified: uima/sandbox/ruta/trunk/ruta-core/src/test/resources/org/apache/uima/ruta/InternalTypeSystem.xml
URL: http://svn.apache.org/viewvc/uima/sandbox/ruta/trunk/ruta-core/src/test/resources/org/apache/uima/ruta/InternalTypeSystem.xml?rev=1491023&r1=1491022&r2=1491023&view=diff
==============================================================================
--- uima/sandbox/ruta/trunk/ruta-core/src/test/resources/org/apache/uima/ruta/InternalTypeSystem.xml (original)
+++ uima/sandbox/ruta/trunk/ruta-core/src/test/resources/org/apache/uima/ruta/InternalTypeSystem.xml Sat Jun 8 18:01:10 2013
@@ -37,6 +37,11 @@
</features>
</typeDescription>
<typeDescription>
+ <name>org.apache.uima.ruta.type.RutaOptional</name>
+ <description/>
+ <supertypeName>uima.tcas.Annotation</supertypeName>
+ </typeDescription>
+ <typeDescription>
<name>org.apache.uima.ruta.type.RutaAnnotation</name>
<description/>
<supertypeName>uima.tcas.Annotation</supertypeName>