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();
+    }
+
+  }
+}