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 2015/02/18 22:21:23 UTC
svn commit: r1660726 - in /uima/ruta/trunk/ruta-core/src:
main/java/org/apache/uima/ruta/engine/RutaEngine.java
main/resources/org/apache/uima/ruta/engine/BasicEngine.xml
test/java/org/apache/uima/ruta/engine/RulesParamTest.java
Author: pkluegl
Date: Wed Feb 18 21:21:22 2015
New Revision: 1660726
URL: http://svn.apache.org/r1660726
Log:
UIMA-4235
- added parameter, functionality and test
Added:
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/RulesParamTest.java
Modified:
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/RutaEngine.java
uima/ruta/trunk/ruta-core/src/main/resources/org/apache/uima/ruta/engine/BasicEngine.xml
Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/RutaEngine.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/RutaEngine.java?rev=1660726&r1=1660725&r2=1660726&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/RutaEngine.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/RutaEngine.java Wed Feb 18 21:21:22 2015
@@ -35,6 +35,7 @@ import java.util.Set;
import org.antlr.runtime.ANTLRFileStream;
import org.antlr.runtime.ANTLRInputStream;
+import org.antlr.runtime.ANTLRStringStream;
import org.antlr.runtime.CharStream;
import org.antlr.runtime.CommonTokenStream;
import org.antlr.runtime.RecognitionException;
@@ -89,6 +90,16 @@ public class RutaEngine extends JCasAnno
public static final String FRAME_TYPE = "org.apache.uima.ruta.type.RutaFrame";
+
+ /**
+ * A String parameter representing the rule that should be applied by the analysis engine.
+ * If set, it replaces the content of file specified by the {@code mainScript} parameter.
+ */
+ public static final String PARAM_RULES = "rules";
+
+ @ConfigurationParameter(name = PARAM_RULES, mandatory = false)
+ private String rules;
+
/**
* Load script in Java notation, with "{@code .}" as package separator and no extension. File
* needs to be located in the path specified below with ending {@code .ruta}.
@@ -424,6 +435,7 @@ public class RutaEngine extends JCasAnno
removeBasics = (Boolean) aContext.getConfigParameterValue(PARAM_REMOVE_BASICS);
scriptPaths = (String[]) aContext.getConfigParameterValue(PARAM_SCRIPT_PATHS);
descriptorPaths = (String[]) aContext.getConfigParameterValue(PARAM_DESCRIPTOR_PATHS);
+ rules = (String) aContext.getConfigParameterValue(PARAM_RULES);
mainScript = (String) aContext.getConfigParameterValue(PARAM_MAIN_SCRIPT);
additionalScripts = (String[]) aContext.getConfigParameterValue(PARAM_ADDITIONAL_SCRIPTS);
additionalEngines = (String[]) aContext.getConfigParameterValue(PARAM_ADDITIONAL_ENGINES);
@@ -703,6 +715,13 @@ public class RutaEngine extends JCasAnno
private void initializeScript(String viewName) throws AnalysisEngineProcessException {
if (mainScript == null) {
+ if(rules != null) {
+ try {
+ script = loadScriptByString(rules);
+ } catch (RecognitionException e) {
+ throw new AnalysisEngineProcessException(e);
+ }
+ }
return;
}
String scriptLocation = locate(mainScript, scriptPaths, SCRIPT_FILE_EXTENSION);
@@ -1008,6 +1027,19 @@ public class RutaEngine extends JCasAnno
}
}
+ private RutaModule loadScriptByString(String rules) throws RecognitionException {
+ CharStream st = new ANTLRStringStream(rules);
+ RutaLexer lexer = new RutaLexer(st);
+ CommonTokenStream tokens = new CommonTokenStream(lexer);
+ RutaParser parser = new RutaParser(tokens);
+ parser.setContext(context);
+ parser.setExternalFactory(factory);
+ parser.setResourcePaths(resourcePaths);
+ parser.setResourceManager(resourceManager);
+ RutaModule script = parser.file_input("Anonymous");
+ return script;
+ }
+
private RutaModule loadScript(String scriptLocation) throws IOException, RecognitionException {
File scriptFile = new File(scriptLocation);
CharStream st = new ANTLRFileStream(scriptLocation, scriptEncoding);
Modified: uima/ruta/trunk/ruta-core/src/main/resources/org/apache/uima/ruta/engine/BasicEngine.xml
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/resources/org/apache/uima/ruta/engine/BasicEngine.xml?rev=1660726&r1=1660725&r2=1660726&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/resources/org/apache/uima/ruta/engine/BasicEngine.xml (original)
+++ uima/ruta/trunk/ruta-core/src/main/resources/org/apache/uima/ruta/engine/BasicEngine.xml Wed Feb 18 21:21:22 2015
@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
-
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
@@ -193,6 +192,12 @@
<multiValued>true</multiValued>
<mandatory>false</mandatory>
</configurationParameter>
+ <configurationParameter>
+ <name>rules</name>
+ <type>String</type>
+ <multiValued>false</multiValued>
+ <mandatory>false</mandatory>
+ </configurationParameter>
</configurationParameters>
<configurationParameterSettings>
<nameValuePair>
Added: uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/RulesParamTest.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/RulesParamTest.java?rev=1660726&view=auto
==============================================================================
--- uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/RulesParamTest.java (added)
+++ uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/RulesParamTest.java Wed Feb 18 21:21:22 2015
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.uima.ruta.engine;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.uima.UIMAFramework;
+import org.apache.uima.analysis_engine.AnalysisEngine;
+import org.apache.uima.analysis_engine.AnalysisEngineDescription;
+import org.apache.uima.cas.CAS;
+import org.apache.uima.cas.FSIterator;
+import org.apache.uima.cas.Type;
+import org.apache.uima.cas.text.AnnotationFS;
+import org.apache.uima.cas.text.AnnotationIndex;
+import org.apache.uima.resource.ResourceConfigurationException;
+import org.apache.uima.resource.ResourceInitializationException;
+import org.apache.uima.resource.ResourceSpecifier;
+import org.apache.uima.ruta.engine.Ruta;
+import org.apache.uima.ruta.engine.RutaEngine;
+import org.apache.uima.ruta.engine.RutaTestUtils;
+import org.apache.uima.util.InvalidXMLException;
+import org.apache.uima.util.XMLInputSource;
+import org.junit.Test;
+
+public class RulesParamTest {
+ @Test
+ public void test() throws IOException, InvalidXMLException, ResourceInitializationException, ResourceConfigurationException {
+ String document = "Some text.";
+ String script = "CW SW{-> T1};\n";
+
+ Map<String, Object> parameters = new HashMap<String, Object>();
+ parameters.put(RutaEngine.PARAM_RULES, script);
+
+ URL url = RutaEngine.class.getClassLoader().getResource("BasicEngine.xml");
+ if (url == null) {
+ url = RutaTestUtils.class.getClassLoader().getResource("org/apache/uima/ruta/TestEngine.xml");
+ }
+ XMLInputSource in = new XMLInputSource(url);
+ ResourceSpecifier specifier = UIMAFramework.getXMLParser().parseResourceSpecifier(in);
+ AnalysisEngine ae = UIMAFramework.produceAnalysisEngine(specifier);
+ ae.setConfigParameterValue(RutaEngine.PARAM_RULES, script);
+ ae.reconfigure();
+ CAS cas = null;
+ try {
+ cas = RutaTestUtils.getCAS(document);
+ ae.process(cas);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+
+ Type t = null;
+ AnnotationIndex<AnnotationFS> ai = null;
+ FSIterator<AnnotationFS> iterator = null;
+
+ t = RutaTestUtils.getTestType(cas, 1);
+ ai = cas.getAnnotationIndex(t);
+ assertEquals(1, ai.size());
+ iterator = ai.iterator();
+ assertEquals("text", iterator.next().getCoveredText());
+
+ if (cas != null) {
+ cas.release();
+ }
+
+ }
+}