Author: pkluegl Date: Sat May 4 15:36:46 2013 New Revision: 1479130 URL: http://svn.apache.org/r1479130 Log: UIMA-2823 - added method for creating an analysis engine description - added test
Modified: uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/Ruta.java uima/sandbox/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/RutaTest.java Modified: uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/Ruta.java URL: http://svn.apache.org/viewvc/uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/Ruta.java?rev=1479130&r1=1479129&r2=1479130&view=diff ============================================================================== --- uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/Ruta.java (original) +++ uima/sandbox/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/Ruta.java Sat May 4 15:36:46 2013 @@ -25,15 +25,23 @@ import java.io.InputStream; import java.net.URISyntaxException; import java.net.URL; import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import org.apache.commons.io.IOUtils; import org.apache.uima.UIMAFramework; import org.apache.uima.analysis_engine.AnalysisEngine; +import org.apache.uima.analysis_engine.AnalysisEngineDescription; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; +import org.apache.uima.analysis_engine.metadata.AnalysisEngineMetaData; import org.apache.uima.cas.CAS; import org.apache.uima.resource.ResourceConfigurationException; import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.resource.ResourceSpecifier; +import org.apache.uima.resource.metadata.ConfigurationParameterSettings; +import org.apache.uima.resource.metadata.TypeSystemDescription; +import org.apache.uima.util.CasCreationUtils; import org.apache.uima.util.FileUtils; import org.apache.uima.util.InvalidXMLException; import org.apache.uima.util.XMLInputSource; @@ -46,15 +54,15 @@ public class Ruta { String viewName = cas.getViewName(); URL aedesc = RutaEngine.class.getResource("BasicEngine.xml"); AnalysisEngine ae = wrapAnalysisEngine(aedesc, viewName); - + File scriptFile = File.createTempFile("Ruta", RutaEngine.SCRIPT_FILE_EXTENSION); scriptFile.deleteOnExit(); if (!script.startsWith("PACKAGE")) { script = "PACKAGE org.apache.uima.ruta;\n" + script; } FileUtils.saveString2File(script, scriptFile); - ae.setConfigParameterValue(RutaEngine.SCRIPT_PATHS, new String[] { scriptFile - .getParentFile().getAbsolutePath() }); + ae.setConfigParameterValue(RutaEngine.SCRIPT_PATHS, new String[] { scriptFile.getParentFile() + .getAbsolutePath() }); String name = scriptFile.getName().substring(0, scriptFile.getName().length() - 5); ae.setConfigParameterValue(RutaEngine.MAIN_SCRIPT, name); ae.reconfigure(); @@ -69,9 +77,9 @@ public class Ruta { return wrapAnalysisEngine(descriptorUrl, viewName, false, Charset.defaultCharset().name()); } - public static AnalysisEngine wrapAnalysisEngine(URL descriptorUrl, String viewName, boolean rutaEngine, - String encoding) throws ResourceInitializationException, ResourceConfigurationException, - InvalidXMLException, IOException, URISyntaxException { + public static AnalysisEngine wrapAnalysisEngine(URL descriptorUrl, String viewName, + boolean rutaEngine, String encoding) throws ResourceInitializationException, + ResourceConfigurationException, InvalidXMLException, IOException, URISyntaxException { if (viewName.equals(CAS.NAME_DEFAULT_SOFA)) { XMLInputSource in = new XMLInputSource(descriptorUrl); ResourceSpecifier specifier = UIMAFramework.getXMLParser().parseResourceSpecifier(in); @@ -79,7 +87,7 @@ public class Ruta { return ae; } else { InputStream inputStream = null; - if(rutaEngine) { + if (rutaEngine) { inputStream = Ruta.class.getResourceAsStream("AAEDBasicEngine.xml"); } else { inputStream = Ruta.class.getResourceAsStream("AAED.xml"); @@ -98,4 +106,38 @@ public class Ruta { } } + public static AnalysisEngineDescription createAnalysisEngineDescription(String script) + throws IOException, InvalidXMLException, ResourceInitializationException { + return createAnalysisEngineDescription(script, (TypeSystemDescription[]) null); + } + + public static AnalysisEngineDescription createAnalysisEngineDescription(String script, + TypeSystemDescription... tsds) throws IOException, InvalidXMLException, + ResourceInitializationException { + File scriptFile = File.createTempFile("Ruta", RutaEngine.SCRIPT_FILE_EXTENSION); + scriptFile.deleteOnExit(); + if (!script.startsWith("PACKAGE")) { + script = "PACKAGE org.apache.uima.ruta;\n" + script; + } + FileUtils.saveString2File(script, scriptFile); + URL url = RutaEngine.class.getResource("BasicEngine.xml"); + XMLInputSource in = new XMLInputSource(url); + AnalysisEngineDescription aed = (AnalysisEngineDescription) UIMAFramework.getXMLParser() + .parseResourceSpecifier(in); + AnalysisEngineMetaData metaData = aed.getAnalysisEngineMetaData(); + ConfigurationParameterSettings settings = metaData.getConfigurationParameterSettings(); + settings.setParameterValue(RutaEngine.SCRIPT_PATHS, new String[] { scriptFile.getParentFile() + .getAbsolutePath() }); + String name = scriptFile.getName().substring(0, scriptFile.getName().length() - 5); + settings.setParameterValue(RutaEngine.MAIN_SCRIPT, name); + if (tsds != null) { + List<TypeSystemDescription> tsdList = new ArrayList<TypeSystemDescription>(); + tsdList.add(metaData.getTypeSystem()); + tsdList.addAll(Arrays.asList(tsds)); + TypeSystemDescription typeSystemDescription = CasCreationUtils.mergeTypeSystems(tsdList); + metaData.setTypeSystem(typeSystemDescription); + } + return aed; + } + } Modified: uima/sandbox/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/RutaTest.java URL: http://svn.apache.org/viewvc/uima/sandbox/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/RutaTest.java?rev=1479130&r1=1479129&r2=1479130&view=diff ============================================================================== --- uima/sandbox/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/RutaTest.java (original) +++ uima/sandbox/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/RutaTest.java Sat May 4 15:36:46 2013 @@ -24,13 +24,19 @@ import static org.junit.Assert.assertEqu import java.net.URL; 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.metadata.FsIndexDescription; +import org.apache.uima.resource.metadata.TypeDescription; import org.apache.uima.resource.metadata.TypePriorities; import org.apache.uima.resource.metadata.TypeSystemDescription; +import org.apache.uima.resource.metadata.impl.TypeDescription_impl; +import org.apache.uima.resource.metadata.impl.TypeSystemDescription_impl; import org.apache.uima.ruta.RutaTestUtils; import org.apache.uima.util.CasCreationUtils; import org.apache.uima.util.XMLInputSource; @@ -39,7 +45,7 @@ import org.junit.Test; public class RutaTest { @Test - public void test() throws Exception { + public void testApply() throws Exception { URL typePrioritiesUrl = RutaTestUtils.class.getResource("TypePriorities.xml"); URL tsUrl = RutaTestUtils.class.getResource("BasicTypeSystem.xml"); Object descriptor = UIMAFramework.getXMLParser().parse(new XMLInputSource(tsUrl)); @@ -73,7 +79,35 @@ public class RutaTest { assertEquals(1, ai.size()); assertEquals("Some document.", iterator.next().getCoveredText()); - cas.release(); } + + @Test + public void testCreateAnalysisEngineDescription() throws Exception { + TypeSystemDescription_impl tsdi = new TypeSystemDescription_impl(); + String t1 = "some.type.Test1"; + String t2 = "some.type.Test2"; + TypeDescription_impl ti1 = new TypeDescription_impl(t1, "", "uima.tcas.Annotation"); + TypeDescription_impl ti2 = new TypeDescription_impl(t2, "", "uima.tcas.Annotation"); + tsdi.setTypes(new TypeDescription[] {ti1, ti2}); + + String script = "CW SW{-> MARK(Test1)};\n Test1 SW{-> MARK(Test2)};"; + AnalysisEngineDescription aed = Ruta.createAnalysisEngineDescription(script, tsdi); + AnalysisEngine ae = UIMAFramework.produceAnalysisEngine(aed); + CAS cas = ae.newCAS(); + cas.setDocumentText("Only some text."); + ae.process(cas); + + Type type1 = cas.getTypeSystem().getType(t1); + AnnotationIndex<AnnotationFS> ai1 = cas.getAnnotationIndex(type1); + assertEquals(1, ai1.size()); + assertEquals("some", ai1.iterator().get().getCoveredText()); + + Type type2 = cas.getTypeSystem().getType(t2); + AnnotationIndex<AnnotationFS> ai2 = cas.getAnnotationIndex(type2); + assertEquals(1, ai2.size()); + assertEquals("text", ai2.iterator().get().getCoveredText()); + } + + }