Sindhu Venkatachary
Sindhu Venkatachary

Reputation: 233

How to reconfigure uima ruta analysis engine (change the parameter values) programmatically?

This is in continuation with the question: How to run external ruta scripts from a maven project without placing the script or its typesystem in the classpath?

Please guide me to reconfigure analysis engine (by changing the parameter values) programmatically.

Upvotes: 2

Views: 290

Answers (1)

Peter Kluegl
Peter Kluegl

Reputation: 3113

Situation: you have a correct xml descriptor of a UIMA Ruta analysis engine and you want to reconfigure so that the paths point to the folder of the descriptor.java url to file

The following code illustrates that by changing the parameter values in different stages. Only one stage is required. Which is the correct one for you depends on your code.

package example;

import java.io.File;
import java.net.URL;

import org.apache.uima.analysis_engine.AnalysisEngine;
import org.apache.uima.analysis_engine.AnalysisEngineDescription;
import org.apache.uima.fit.factory.AnalysisEngineFactory;
import org.apache.uima.resource.metadata.ConfigurationParameterSettings;
import org.apache.uima.ruta.engine.RutaEngine;

public class ReconfigureExample {

  public static void main(String[] args) throws Exception {

    File file = new File("path to descriptor");
    String path = new File(file.toURI()).getParentFile().getAbsolutePath();
    String[] pathsArray = new String[] { path };

    // override the values in the descriptor when creating the description
    AnalysisEngineDescription desc = AnalysisEngineFactory.createEngineDescriptionFromPath(
            file.getAbsolutePath(), RutaEngine.PARAM_SCRIPT_PATHS, pathsArray,
            RutaEngine.PARAM_DESCRIPTOR_PATHS, pathsArray, RutaEngine.PARAM_RESOURCE_PATHS,
            pathsArray);

    // in case the location of the descriptor is not known...
    URL sourceUrl = desc.getSourceUrl();
    path = new File(sourceUrl.toURI()).getParentFile().getAbsolutePath();
    pathsArray = new String[] { path };

    // set the values in the description
    ConfigurationParameterSettings settings = desc.getAnalysisEngineMetaData()
            .getConfigurationParameterSettings();
    settings.setParameterValue(RutaEngine.PARAM_SCRIPT_PATHS, pathsArray);
    settings.setParameterValue(RutaEngine.PARAM_DESCRIPTOR_PATHS, pathsArray);
    settings.setParameterValue(RutaEngine.PARAM_RESOURCE_PATHS, pathsArray);

    // override the values in the descriptor when creating the analysis engine
    AnalysisEngine ae = AnalysisEngineFactory.createEngine(desc, RutaEngine.PARAM_SCRIPT_PATHS, pathsArray,
            RutaEngine.PARAM_DESCRIPTOR_PATHS, pathsArray, RutaEngine.PARAM_RESOURCE_PATHS,
            pathsArray);

    // set the values in the analysis engine and reconfigure it
    ae.setConfigParameterValue(RutaEngine.PARAM_SCRIPT_PATHS, pathsArray);
    ae.setConfigParameterValue(RutaEngine.PARAM_DESCRIPTOR_PATHS, pathsArray);
    ae.setConfigParameterValue(RutaEngine.PARAM_RESOURCE_PATHS, pathsArray);
    ae.reconfigure();

  }

}

DISCLAIMER: I am a developer of UIMA Ruta

Upvotes: 2

Related Questions