You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@uima.apache.org by "Peter Klügl (JIRA)" <de...@uima.apache.org> on 2013/12/09 11:27:07 UTC

[jira] [Updated] (UIMA-3357) CONTAINS fails when running script as AE in a pipeline with a new CAS

     [ https://issues.apache.org/jira/browse/UIMA-3357?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Peter Klügl updated UIMA-3357:
------------------------------

    Fix Version/s: 2.1.1ruta

> CONTAINS fails when running script as AE in a pipeline with a new CAS
> ---------------------------------------------------------------------
>
>                 Key: UIMA-3357
>                 URL: https://issues.apache.org/jira/browse/UIMA-3357
>             Project: UIMA
>          Issue Type: Bug
>          Components: ruta, uimaFIT
>    Affects Versions: 2.0.1ruta, 2.1.0ruta
>            Reporter: Daniel Maeurer
>            Assignee: Peter Klügl
>            Priority: Minor
>             Fix For: 2.1.1ruta
>
>
> When running my Ruta script as an analysis engine in a pipeline, it does not work correctly when creating a new CAS and processing the pipeline a second time with the new CAS. 
> While reusing the old cas with "cas.reset()" is working, creating a new CAS results in failing rules including "CONTAINS" in the ruta script.
> The ruta script used in the example:
> {code:title=mystic.ruta|borderStyle=solid}
> PACKAGE de.tudarmstadt.algo.vpino.ruta;
> DECLARE test;
> Document{CONTAINS(CW)->MARK(test)};
> {code}
> The following Java class can reproduce the error. It creates four xmi files. The last xmi file is missing the annotations created with rules including "CONTAINS".
> {code:title=MysticPipe.java|borderStyle=solid}
> package org.uimafit.pipeline;
> import java.io.File;
> import java.io.FileOutputStream;
> import java.io.IOException;
> import java.io.OutputStream;
> import java.util.ArrayList;
> import java.util.List;
> 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.cas.CAS;
> import org.apache.uima.cas.impl.XmiCasSerializer;
> import org.apache.uima.fit.factory.AnalysisEngineFactory;
> import org.apache.uima.fit.pipeline.SimplePipeline;
> import org.apache.uima.resource.ResourceInitializationException;
> import org.apache.uima.resource.metadata.ResourceMetaData;
> import org.apache.uima.util.CasCreationUtils;
> import org.apache.uima.util.InvalidXMLException;
> import org.apache.uima.util.XMLInputSource;
> import org.apache.uima.util.XMLSerializer;
> import org.xml.sax.SAXException;
> public class MysticPipe {
> 	public static void main(String[] args) throws Exception {
> 		working("This is a test.", initPipeline());
> 		failing("This is a test.", initPipeline());
> 	}
> 	private static AnalysisEngine initPipeline() throws ResourceInitializationException, IOException, InvalidXMLException {
> 		File specFile = new File("./descriptor/de/tudarmstadt/algo/vpino/ruta/mysticEngine.xml");
> 		XMLInputSource in = new XMLInputSource(specFile);
> 		AnalysisEngineDescription ruta = (AnalysisEngineDescription) UIMAFramework.getXMLParser().parseResourceSpecifier(in);
> 		return AnalysisEngineFactory.createEngine(ruta);
> 	}
> 	private static void working(String input, AnalysisEngine theEngine) throws ResourceInitializationException, AnalysisEngineProcessException, IOException,
> 	        SAXException {
> 		final List<ResourceMetaData> metaData = new ArrayList<ResourceMetaData>();
> 		metaData.add(theEngine.getMetaData());
> 		final CAS cas = CasCreationUtils.createCas(metaData);
> 		System.out.println("create a new cas...");
> 		cas.setDocumentLanguage("de");
> 		cas.setDocumentText(input);
> 		SimplePipeline.runPipeline(cas, theEngine);
> 		writeXmiFile(cas, "works_test1");//CHECK
> 		//THE DIFFERENCE
> 		cas.reset();
> 		//END DIFFERENCE
> 		System.out.println("create a new cas...");
> 		cas.setDocumentLanguage("de");
> 		cas.setDocumentText(input);
> 		SimplePipeline.runPipeline(cas, theEngine);
> 		writeXmiFile(cas, "works_test2");//CHECK
> 	}
> 	private static void failing(String input, AnalysisEngine theEngine) throws ResourceInitializationException, AnalysisEngineProcessException, IOException,
> 	        SAXException {
> 		final List<ResourceMetaData> metaData = new ArrayList<ResourceMetaData>();
> 		metaData.add(theEngine.getMetaData());
> 		final CAS cas = CasCreationUtils.createCas(metaData);
> 		System.out.println("create a new cas...");
> 		cas.setDocumentLanguage("de");
> 		cas.setDocumentText(input);
> 		SimplePipeline.runPipeline(cas, theEngine);
> 		writeXmiFile(cas, "works_test3"); // CHECK
> 		//THE DIFFERENCE
> 		final CAS cas2 = CasCreationUtils.createCas(metaData);
> 		//END DIFFERENCE
> 		System.out.println("create a new cas...");
> 		cas2.setDocumentLanguage("de");
> 		cas2.setDocumentText(input);
> 		SimplePipeline.runPipeline(cas2, theEngine);
> 		writeXmiFile(cas2, "fail_test4"); //FAIL
> 		return;
> 	}
> 	
> 	public static void writeXmiFile(CAS aCas, String Fname) throws IOException, SAXException {
> 		File outFile = new File("output", Fname + ".xmi");
> 		OutputStream out = null;
> 		try {
> 			// out = new StringOutputStream();
> 			out = new FileOutputStream(outFile);
> 			XmiCasSerializer ser = new XmiCasSerializer(aCas.getTypeSystem());
> 			XMLSerializer xmlSer = new XMLSerializer(out, false);
> 			ser.serialize(aCas, xmlSer.getContentHandler());
> 		} finally {
> 			if (out != null) {
> 				out.close();
> 			}
> 		}
> 	}
> }
> {code}



--
This message was sent by Atlassian JIRA
(v6.1.4#6159)