You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@uima.apache.org by "Prokopis Prokopidis (JIRA)" <de...@uima.apache.org> on 2013/10/23 16:21:41 UTC

[jira] [Created] (UIMA-3368) Ruta and UIMA-AS

Prokopis Prokopidis created UIMA-3368:
-----------------------------------------

             Summary: Ruta and UIMA-AS
                 Key: UIMA-3368
                 URL: https://issues.apache.org/jira/browse/UIMA-3368
             Project: UIMA
          Issue Type: Bug
          Components: Async Scaleout, ruta
    Affects Versions: 2.1.0ruta, 2.4.0AS
            Reporter: Prokopis Prokopidis
            Priority: Minor


Hi,

I get errors when applying Ruta rules from an Annotator deployed as a UIMA-AS service. Here's my situation.

I have a SimpleAnnotator class that assigns tags to Tokens. So, when I have a test.txt in my input with this content:

$ more test.txt
A room . 

... I get, among other things, the following output

{code:xml}<examples:Token xmi:id="21" sofa="1" begin="1" end="2" pos="aTag"/>
<examples:Token xmi:id="26" sofa="1" begin="3" end="7" pos="anotherTag"/>
{code}

To get the tags, I use java code as in the attached SimpleAnnotator.java and ruta rules.
All's fine when I run this a standard UIMA pipeline. But, if I deploy the annotator in UIMA-AS and I send the same text to the queue created, I get NullPointerException's similar to those:

Caused by: java.lang.NullPointerException
        at org.apache.uima.cas.impl.FSIndexRepositoryImpl.getIndex(FSIndexRepositoryImpl.java:1334)
        at org.apache.uima.cas.impl.CASImpl.getAnnotationIndex(CASImpl.java:3935)
        at org.apache.uima.ruta.RutaStream.updateIterators(RutaStream.java:131)
        at org.apache.uima.ruta.RutaStream.<init>(RutaStream.java:94)
        at org.apache.uima.ruta.RutaStream.<init>(RutaStream.java:138)
        at org.apache.uima.ruta.engine.RutaEngine.initializeStream(RutaEngine.java:580)
        at org.apache.uima.ruta.engine.RutaEngine.process(RutaEngine.java:440)
        at org.apache.uima.analysis_component.JCasAnnotator_ImplBase.process(JCasAnnotator_ImplBase.java:48)
        at org.apache.uima.analysis_engine.impl.PrimitiveAnalysisEngine_impl.callAnalysisComponentProcess(PrimitiveAnalysisEngine_impl.java:375)
}}
and rules are not applied.

I can provide an eclipse project including a typesystem and a deployment descriptor if needed.

Many thanks for looking into this,

Prokopis 

{code:java}
package org.apache.uima.examples;

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.uima.analysis_component.JCasAnnotator_ImplBase;
import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
import org.apache.uima.jcas.JCas;
import org.apache.uima.ruta.engine.Ruta;
import org.apache.uima.ruta.engine.RutaEngine;

public class SimpleAnnotator extends JCasAnnotator_ImplBase {
	public void process(JCas aJCas) throws AnalysisEngineProcessException {
		String text = aJCas.getDocumentText();
        Matcher matcher = Pattern.compile("\\w+").matcher(text);
        while(matcher.find()){
            Token token = new Token(aJCas, matcher.start(), matcher.end());
            token.setPos("aTag");
            token.addToIndexes();
        }
		Map<String, Object> parameters = null;
		parameters = new HashMap<String, Object>();
		parameters.put(RutaEngine.PARAM_REMOVE_BASICS, true);
		parameters.put(RutaEngine.PARAM_SEEDERS, new String[0]);
		String rules = 
				"Token{REGEXP(\"room\")-> Token.pos=\"STOP\"};   \n"
				+ "Token{REGEXP(Token.pos, \"STOP\")-> Token.pos=\"anotherTag\"};";
		try {
			Ruta.apply(aJCas.getCas(), rules, parameters);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
{code}




--
This message was sent by Atlassian JIRA
(v6.1#6144)