You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@uima.apache.org by Olivier Austina <ol...@gmail.com> on 2015/11/12 14:12:46 UTC

how to call UIMA Ruta from uimaFIT

Hi,

I try to call a simple UIMA ruta script from uimaFIT in java. It works in
plain UIMA but it didn't work in uimaFIT for me.  Here is the script:

PACKAGE tutorial.entity;
WORDLIST MonthsList = 'month.txt';
DECLARE Month;
DECLARE Year;
DECLARE Date;
Document{-> MARKFAST(Month, MonthsList )};
NUM{REGEXP("19..|20..") -> MARK(Year,1,2)};
Month Year {-> MARK(Date,1,2)};

Here is the java code (based on Ruta doc example):

//System.out.println( "Hello World!" );
        File specFile = new
File("/home/olhome/software/workspace/rutatest1/dateproject/descriptor/tutorial/entity/DateEngine.xml");
            XMLInputSource in = new XMLInputSource(specFile);
            ResourceSpecifier specifier = UIMAFramework.getXMLParser().
                parseResourceSpecifier(in);
            // for import by name... set the datapath in the ResourceManager
            AnalysisEngine ae =
UIMAFramework.produceAnalysisEngine(specifier);
            CAS cas = ae.newCAS();
            cas.setDocumentText("This is my document. March  June
December");
            ae.process(cas);

            JCas jcas = cas.getJCas();
            for (Month month : JCasUtil.select(jcas, Month.class)) {
                   System.out.println(month.getCoveredText());
                }

  This is the pom dependencies:

    <dependency>
       <groupId>org.apache.uima</groupId>
       <artifactId>ruta-core</artifactId>
       <version>2.3.1</version>
    </dependency>

    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimafit-core</artifactId>
      <version>2.1.0</version>
    </dependency>


I have the following error:

Exception in thread "main" java.lang.Error: Unresolved compilation
problems:
    Month cannot be resolved to a type
    Bound mismatch: The generic method select(FSArray, Class<T>) of type
JCasUtil is not applicable for the arguments (JCas, Class<Month>). The
inferred type Month is not a valid substitute for the bounded parameter <T
extends TOP>
    Month cannot be resolved to a type
    at tuto.tuto_step0.App.main(App.java:51)


It seems that I am not able to correctly import types like in the maven
example. I am not so familiar with maven. I have put the DateTypeSystem.xml
in a folder called tuto under src folder and add the line
"classpath*:/tuto/DateTypeSystem.xml" in the text file
src/META-INF/org.apache.uima.fit/types.txt.

Any suggestion is welcome. Thank you.

Regards
Olivier

Re: how to call UIMA Ruta from uimaFIT

Posted by Peter Klügl <pe...@averbis.com>.
Hi,

you're welcome :-)

Yes, the class is not generated automatically when the project is
imported. I usually call "maven->update project" which cleans and builds
the project and helps Eclipse to update the source folders.

Best,

Peter

Am 13.11.2015 um 15:18 schrieb Olivier Austina:
> Hi Peter,
>
> Thank for your help it works very very well now.
> The first time I import your project, it indicates an error for import
> tutorial.entity.Date.Date statement. I fixed it following this post here
> <http://philip.yurchuk.com/software/eclipse-cannot-be-resolved-to-a-type-error/>
> if it can help someone also. These 4 instructions : *Clean, refresh, build,
> restart.*
> Thank you again.
>
> Regards
> Olivier
>
>
> 2015-11-13 14:01 GMT+01:00 Peter Klügl <pe...@averbis.com>:
>
>> Hi,
>>
>> I assume that there are several problems, e.g., the missing JCas cover
>> classes.
>>
>> I have taken the liberty to create a project based on your example like
>> I would use ruta right now (with 2.3.1):
>> http://people.apache.org/~pkluegl/examples/date-example.zip
>>
>> - the script file are in src/main/ruta
>> - the wordlist file is in src/main/resources
>> - the descriptors are generated to target/generated-sources/ruta
>> - the JCas cover classes are generated to  target/generated-sources/jcasgen
>> - src/test/java contains two JUnit tests: one based on the generated
>> descriptor and one based on uimaFIT without ae descriptor
>>
>> Let me know if this helps and/or you have questions about the project
>> setup.
>>
>> Best,
>>
>> Peter
>>
>> Am 12.11.2015 um 17:04 schrieb Olivier Austina:
>>> Hi Peter,
>>>
>>>
>>> Thank you for you reply. To answer to your questions:
>>>
>>>
>>> - who created DateTypeSystem.xml? Was it the ruta-maven-plugin or the
>>> build process of the Ruta Workbench? Did you move the type system
>>> descriptor, e.g., making the import in the AE descriptor invalid?
>>>
>>> DateTypeSystem.xml is created by the Ruta Workbench. I have created the
>>> project with Ruta Workbench and then try to use it in java program with
>>> maven. This is the DateTypeSystem.xml file content :
>>>
>>> <?xml version="1.0" encoding="UTF-8"?>
>>> <typeSystemDescription xmlns="http://uima.apache.org/resourceSpecifier">
>>>     <name>tutorial.entity.DateTypeSystem</name>
>>>     <imports>
>>>         <import location="../../BasicTypeSystem.xml"/>
>>>     </imports>
>>>     <types>
>>>         <typeDescription>
>>>             <name>tutorial.entity.Date.Month</name>
>>>             <description>Type defined in
>> tutorial.entity.Date</description>
>>>             <supertypeName>uima.tcas.Annotation</supertypeName>
>>>         </typeDescription>
>>>         <typeDescription>
>>>             <name>tutorial.entity.Date.Year</name>
>>>             <description>Type defined in
>> tutorial.entity.Date</description>
>>>             <supertypeName>uima.tcas.Annotation</supertypeName>
>>>         </typeDescription>
>>>         <typeDescription>
>>>             <name>tutorial.entity.Date.Date</name>
>>>             <description>Type defined in
>> tutorial.entity.Date</description>
>>>             <supertypeName>uima.tcas.Annotation</supertypeName>
>>>         </typeDescription>
>>>     </types>
>>> </typeSystemDescription>
>>>
>>> - did you include the jcasgen-maven-plugin in your pom? Or did you use
>>> the Component Descriptor Editor to create JCas cover classes.
>>>
>>> No I didn't use it. I have only create a simple maven project with
>> eclipse
>>> and try to call UIMA Ruta with uimaFIT.
>>>
>>> - the error messages indicate that the type system import of your
>>> analysis engine has some problems and that the Month type is not
>>> resolved. Furthermore,tThe Month class (JCas cover class for the type)
>>> is missing. Either there was already a class or JCasGen was not executed.
>>>
>>> Can you provide the complete pom and a short description of the layout
>>> of your project?
>>>
>>> This is the pom:
>>>
>>> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="
>>> http://www.w3.org/2001/XMLSchema-instance"
>>>   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
>>> http://maven.apache.org/xsd/maven-4.0.0.xsd">
>>>   <modelVersion>4.0.0</modelVersion>
>>>
>>>   <groupId>tuto</groupId>
>>>   <artifactId>tuto-step0</artifactId>
>>>   <version>0.0.1-SNAPSHOT</version>
>>>   <packaging>jar</packaging>
>>>
>>>   <name>tuto-step0</name>
>>>   <url>http://maven.apache.org</url>
>>>
>>>   <properties>
>>>     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
>>>   </properties>
>>>
>>>   <dependencies>
>>>     <dependency>
>>>        <groupId>org.apache.uima</groupId>
>>>        <artifactId>ruta-core</artifactId>
>>>        <version>2.3.1</version>
>>>     </dependency>
>>>
>>>     <dependency>
>>>       <groupId>org.apache.uima</groupId>
>>>       <artifactId>uimafit-core</artifactId>
>>>       <version>2.1.0</version>
>>>     </dependency>
>>>     <dependency>
>>>       <groupId>junit</groupId>
>>>       <artifactId>junit</artifactId>
>>>       <version>3.8.1</version>
>>>       <scope>test</scope>
>>>     </dependency>
>>>   </dependencies>
>>> </project>
>>>
>>> This is java code with imports:
>>>
>>> package tuto.tuto_step0;
>>>
>>> import java.io.File;
>>> import java.io.IOException;
>>>
>>> import org.apache.uima.UIMAFramework;
>>> import org.apache.uima.analysis_engine.AnalysisEngine;
>>> import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
>>> import org.apache.uima.cas.CAS;
>>> import org.apache.uima.cas.CASException;
>>> import org.apache.uima.cas.text.AnnotationFS;
>>> import org.apache.uima.cas.text.AnnotationIndex;
>>> import org.apache.uima.fit.util.ContainmentIndex.Type;
>>> import org.apache.uima.fit.util.JCasUtil;
>>> import org.apache.uima.jcas.JCas;
>>> import org.apache.uima.resource.ResourceInitializationException;
>>> import org.apache.uima.resource.ResourceSpecifier;
>>> import org.apache.uima.util.InvalidXMLException;
>>> import org.apache.uima.util.XMLInputSource;
>>>
>>>
>>>
>>> public class App
>>> {
>>>     public static void main( String[] args ) throws IOException,
>>> InvalidXMLException, ResourceInitializationException,
>>> AnalysisEngineProcessException, CASException
>>>     {
>>>         //System.out.println( "Hello World!" );
>>>         File specFile = new
>>>
>> File("/home/olhome/software/workspace/rutatest1/dateproject/descriptor/tutorial/entity/DateEngine.xml");
>>>             XMLInputSource in = new XMLInputSource(specFile);
>>>             ResourceSpecifier specifier = UIMAFramework.getXMLParser().
>>>                 parseResourceSpecifier(in);
>>>             // for import by name... set the datapath in the
>> ResourceManager
>>>             AnalysisEngine ae =
>>> UIMAFramework.produceAnalysisEngine(specifier);
>>>             CAS cas = ae.newCAS();
>>>             cas.setDocumentText("This is my document. March  June
>>> December");
>>>             ae.process(cas);
>>>             // For plain UIMA
>>>             /*
>>>             org.apache.uima.cas.Type monthType =
>>> cas.getTypeSystem().getType("tutorial.entity.Date.Month");
>>>             AnnotationIndex<AnnotationFS> annotationIndex =
>>>             cas.getAnnotationIndex(monthType);
>>>             for (AnnotationFS each : annotationIndex) {
>>>               System.out.println(each.getCoveredText());
>>>             }
>>>             */
>>>
>>>             JCas jcas = cas.getJCas();
>>>             for (Month month : JCasUtil.select(jcas, Month.class)) {
>>>                    System.out.println(month.getCoveredText());
>>>                 }
>>>
>>>
>>>     }
>>> }
>>>
>>> Thank you.
>>>
>>> Regards
>>> Olivier
>>>
>>>
>>> 2015-11-12 14:35 GMT+01:00 Peter Klügl <pe...@averbis.com>:
>>>
>>>> Hi,
>>>>
>>>> here a few fast comments and questions:
>>>> - the example code uses uimaFIT only for the select, but not for the
>>>> creation/initialization of the components/CAS. Thus,
>>>> org.apache.uima.fit/types.txt won't help much. However, the types should
>>>> be included by the import in the AE.
>>>> - who created DateTypeSystem.xml? Was it the ruta-maven-plugin or the
>>>> build process of the Ruta Workbench? Did you move the type system
>>>> descriptor, e.g., making the import in the AE descriptor invalid?
>>>> - did you include the jcasgen-maven-plugin in your pom? Or did you use
>>>> the Component Descriptor Editor to create JCas cover classes.
>>>> - the error messages indicate that the type system import of your
>>>> analysis engine has some problems and that the Month type is not
>>>> resolved. Furthermore,tThe Month class (JCas cover class for the type)
>>>> is missing. Either there was already a class or JCasGen was not
>> executed.
>>>> Can you provide the complete pom and a short description of the layout
>>>> of your project?
>>>>
>>>> Best,
>>>>
>>>> Peter
>>>>
>>>> PS: a uimaFIT like approach for creating a Ruta engine could look like
>>>> (whereas direct initialization of AE should be avoided in general):
>>>> AnalysisEngine ae = createEngine(RutaEngine.class,
>>>>             RutaEngine.PARAM_MAIN_SCRIPT,
>>>> "org.apache.uima.ruta.engine.UimafitTest",
>>>>             RutaEngine.PARAM_SCRIPT_PATHS, new String[] {
>>>> "src/test/resources" });
>>>>
>>>>
>>>> Am 12.11.2015 um 14:12 schrieb Olivier Austina:
>>>>> Hi,
>>>>>
>>>>> I try to call a simple UIMA ruta script from uimaFIT in java. It works
>> in
>>>>> plain UIMA but it didn't work in uimaFIT for me.  Here is the script:
>>>>>
>>>>> PACKAGE tutorial.entity;
>>>>> WORDLIST MonthsList = 'month.txt';
>>>>> DECLARE Month;
>>>>> DECLARE Year;
>>>>> DECLARE Date;
>>>>> Document{-> MARKFAST(Month, MonthsList )};
>>>>> NUM{REGEXP("19..|20..") -> MARK(Year,1,2)};
>>>>> Month Year {-> MARK(Date,1,2)};
>>>>>
>>>>> Here is the java code (based on Ruta doc example):
>>>>>
>>>>> //System.out.println( "Hello World!" );
>>>>>         File specFile = new
>>>>>
>> File("/home/olhome/software/workspace/rutatest1/dateproject/descriptor/tutorial/entity/DateEngine.xml");
>>>>>             XMLInputSource in = new XMLInputSource(specFile);
>>>>>             ResourceSpecifier specifier = UIMAFramework.getXMLParser().
>>>>>                 parseResourceSpecifier(in);
>>>>>             // for import by name... set the datapath in the
>>>> ResourceManager
>>>>>             AnalysisEngine ae =
>>>>> UIMAFramework.produceAnalysisEngine(specifier);
>>>>>             CAS cas = ae.newCAS();
>>>>>             cas.setDocumentText("This is my document. March  June
>>>>> December");
>>>>>             ae.process(cas);
>>>>>
>>>>>             JCas jcas = cas.getJCas();
>>>>>             for (Month month : JCasUtil.select(jcas, Month.class)) {
>>>>>                    System.out.println(month.getCoveredText());
>>>>>                 }
>>>>>
>>>>>   This is the pom dependencies:
>>>>>
>>>>>     <dependency>
>>>>>        <groupId>org.apache.uima</groupId>
>>>>>        <artifactId>ruta-core</artifactId>
>>>>>        <version>2.3.1</version>
>>>>>     </dependency>
>>>>>
>>>>>     <dependency>
>>>>>       <groupId>org.apache.uima</groupId>
>>>>>       <artifactId>uimafit-core</artifactId>
>>>>>       <version>2.1.0</version>
>>>>>     </dependency>
>>>>>
>>>>>
>>>>> I have the following error:
>>>>>
>>>>> Exception in thread "main" java.lang.Error: Unresolved compilation
>>>>> problems:
>>>>>     Month cannot be resolved to a type
>>>>>     Bound mismatch: The generic method select(FSArray, Class<T>) of
>> type
>>>>> JCasUtil is not applicable for the arguments (JCas, Class<Month>). The
>>>>> inferred type Month is not a valid substitute for the bounded parameter
>>>> <T
>>>>> extends TOP>
>>>>>     Month cannot be resolved to a type
>>>>>     at tuto.tuto_step0.App.main(App.java:51)
>>>>>
>>>>>
>>>>> It seems that I am not able to correctly import types like in the maven
>>>>> example. I am not so familiar with maven. I have put the
>>>> DateTypeSystem.xml
>>>>> in a folder called tuto under src folder and add the line
>>>>> "classpath*:/tuto/DateTypeSystem.xml" in the text file
>>>>> src/META-INF/org.apache.uima.fit/types.txt.
>>>>>
>>>>> Any suggestion is welcome. Thank you.
>>>>>
>>>>> Regards
>>>>> Olivier
>>>>>
>>


Re: how to call UIMA Ruta from uimaFIT

Posted by Olivier Austina <ol...@gmail.com>.
Hi Peter,

Thank for your help it works very very well now.
The first time I import your project, it indicates an error for import
tutorial.entity.Date.Date statement. I fixed it following this post here
<http://philip.yurchuk.com/software/eclipse-cannot-be-resolved-to-a-type-error/>
if it can help someone also. These 4 instructions : *Clean, refresh, build,
restart.*
Thank you again.

Regards
Olivier


2015-11-13 14:01 GMT+01:00 Peter Klügl <pe...@averbis.com>:

> Hi,
>
> I assume that there are several problems, e.g., the missing JCas cover
> classes.
>
> I have taken the liberty to create a project based on your example like
> I would use ruta right now (with 2.3.1):
> http://people.apache.org/~pkluegl/examples/date-example.zip
>
> - the script file are in src/main/ruta
> - the wordlist file is in src/main/resources
> - the descriptors are generated to target/generated-sources/ruta
> - the JCas cover classes are generated to  target/generated-sources/jcasgen
> - src/test/java contains two JUnit tests: one based on the generated
> descriptor and one based on uimaFIT without ae descriptor
>
> Let me know if this helps and/or you have questions about the project
> setup.
>
> Best,
>
> Peter
>
> Am 12.11.2015 um 17:04 schrieb Olivier Austina:
> > Hi Peter,
> >
> >
> > Thank you for you reply. To answer to your questions:
> >
> >
> > - who created DateTypeSystem.xml? Was it the ruta-maven-plugin or the
> > build process of the Ruta Workbench? Did you move the type system
> > descriptor, e.g., making the import in the AE descriptor invalid?
> >
> > DateTypeSystem.xml is created by the Ruta Workbench. I have created the
> > project with Ruta Workbench and then try to use it in java program with
> > maven. This is the DateTypeSystem.xml file content :
> >
> > <?xml version="1.0" encoding="UTF-8"?>
> > <typeSystemDescription xmlns="http://uima.apache.org/resourceSpecifier">
> >     <name>tutorial.entity.DateTypeSystem</name>
> >     <imports>
> >         <import location="../../BasicTypeSystem.xml"/>
> >     </imports>
> >     <types>
> >         <typeDescription>
> >             <name>tutorial.entity.Date.Month</name>
> >             <description>Type defined in
> tutorial.entity.Date</description>
> >             <supertypeName>uima.tcas.Annotation</supertypeName>
> >         </typeDescription>
> >         <typeDescription>
> >             <name>tutorial.entity.Date.Year</name>
> >             <description>Type defined in
> tutorial.entity.Date</description>
> >             <supertypeName>uima.tcas.Annotation</supertypeName>
> >         </typeDescription>
> >         <typeDescription>
> >             <name>tutorial.entity.Date.Date</name>
> >             <description>Type defined in
> tutorial.entity.Date</description>
> >             <supertypeName>uima.tcas.Annotation</supertypeName>
> >         </typeDescription>
> >     </types>
> > </typeSystemDescription>
> >
> > - did you include the jcasgen-maven-plugin in your pom? Or did you use
> > the Component Descriptor Editor to create JCas cover classes.
> >
> > No I didn't use it. I have only create a simple maven project with
> eclipse
> > and try to call UIMA Ruta with uimaFIT.
> >
> > - the error messages indicate that the type system import of your
> > analysis engine has some problems and that the Month type is not
> > resolved. Furthermore,tThe Month class (JCas cover class for the type)
> > is missing. Either there was already a class or JCasGen was not executed.
> >
> > Can you provide the complete pom and a short description of the layout
> > of your project?
> >
> > This is the pom:
> >
> > <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="
> > http://www.w3.org/2001/XMLSchema-instance"
> >   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
> > http://maven.apache.org/xsd/maven-4.0.0.xsd">
> >   <modelVersion>4.0.0</modelVersion>
> >
> >   <groupId>tuto</groupId>
> >   <artifactId>tuto-step0</artifactId>
> >   <version>0.0.1-SNAPSHOT</version>
> >   <packaging>jar</packaging>
> >
> >   <name>tuto-step0</name>
> >   <url>http://maven.apache.org</url>
> >
> >   <properties>
> >     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
> >   </properties>
> >
> >   <dependencies>
> >     <dependency>
> >        <groupId>org.apache.uima</groupId>
> >        <artifactId>ruta-core</artifactId>
> >        <version>2.3.1</version>
> >     </dependency>
> >
> >     <dependency>
> >       <groupId>org.apache.uima</groupId>
> >       <artifactId>uimafit-core</artifactId>
> >       <version>2.1.0</version>
> >     </dependency>
> >     <dependency>
> >       <groupId>junit</groupId>
> >       <artifactId>junit</artifactId>
> >       <version>3.8.1</version>
> >       <scope>test</scope>
> >     </dependency>
> >   </dependencies>
> > </project>
> >
> > This is java code with imports:
> >
> > package tuto.tuto_step0;
> >
> > import java.io.File;
> > import java.io.IOException;
> >
> > import org.apache.uima.UIMAFramework;
> > import org.apache.uima.analysis_engine.AnalysisEngine;
> > import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
> > import org.apache.uima.cas.CAS;
> > import org.apache.uima.cas.CASException;
> > import org.apache.uima.cas.text.AnnotationFS;
> > import org.apache.uima.cas.text.AnnotationIndex;
> > import org.apache.uima.fit.util.ContainmentIndex.Type;
> > import org.apache.uima.fit.util.JCasUtil;
> > import org.apache.uima.jcas.JCas;
> > import org.apache.uima.resource.ResourceInitializationException;
> > import org.apache.uima.resource.ResourceSpecifier;
> > import org.apache.uima.util.InvalidXMLException;
> > import org.apache.uima.util.XMLInputSource;
> >
> >
> >
> > public class App
> > {
> >     public static void main( String[] args ) throws IOException,
> > InvalidXMLException, ResourceInitializationException,
> > AnalysisEngineProcessException, CASException
> >     {
> >         //System.out.println( "Hello World!" );
> >         File specFile = new
> >
> File("/home/olhome/software/workspace/rutatest1/dateproject/descriptor/tutorial/entity/DateEngine.xml");
> >             XMLInputSource in = new XMLInputSource(specFile);
> >             ResourceSpecifier specifier = UIMAFramework.getXMLParser().
> >                 parseResourceSpecifier(in);
> >             // for import by name... set the datapath in the
> ResourceManager
> >             AnalysisEngine ae =
> > UIMAFramework.produceAnalysisEngine(specifier);
> >             CAS cas = ae.newCAS();
> >             cas.setDocumentText("This is my document. March  June
> > December");
> >             ae.process(cas);
> >             // For plain UIMA
> >             /*
> >             org.apache.uima.cas.Type monthType =
> > cas.getTypeSystem().getType("tutorial.entity.Date.Month");
> >             AnnotationIndex<AnnotationFS> annotationIndex =
> >             cas.getAnnotationIndex(monthType);
> >             for (AnnotationFS each : annotationIndex) {
> >               System.out.println(each.getCoveredText());
> >             }
> >             */
> >
> >             JCas jcas = cas.getJCas();
> >             for (Month month : JCasUtil.select(jcas, Month.class)) {
> >                    System.out.println(month.getCoveredText());
> >                 }
> >
> >
> >     }
> > }
> >
> > Thank you.
> >
> > Regards
> > Olivier
> >
> >
> > 2015-11-12 14:35 GMT+01:00 Peter Klügl <pe...@averbis.com>:
> >
> >> Hi,
> >>
> >> here a few fast comments and questions:
> >> - the example code uses uimaFIT only for the select, but not for the
> >> creation/initialization of the components/CAS. Thus,
> >> org.apache.uima.fit/types.txt won't help much. However, the types should
> >> be included by the import in the AE.
> >> - who created DateTypeSystem.xml? Was it the ruta-maven-plugin or the
> >> build process of the Ruta Workbench? Did you move the type system
> >> descriptor, e.g., making the import in the AE descriptor invalid?
> >> - did you include the jcasgen-maven-plugin in your pom? Or did you use
> >> the Component Descriptor Editor to create JCas cover classes.
> >> - the error messages indicate that the type system import of your
> >> analysis engine has some problems and that the Month type is not
> >> resolved. Furthermore,tThe Month class (JCas cover class for the type)
> >> is missing. Either there was already a class or JCasGen was not
> executed.
> >>
> >> Can you provide the complete pom and a short description of the layout
> >> of your project?
> >>
> >> Best,
> >>
> >> Peter
> >>
> >> PS: a uimaFIT like approach for creating a Ruta engine could look like
> >> (whereas direct initialization of AE should be avoided in general):
> >> AnalysisEngine ae = createEngine(RutaEngine.class,
> >>             RutaEngine.PARAM_MAIN_SCRIPT,
> >> "org.apache.uima.ruta.engine.UimafitTest",
> >>             RutaEngine.PARAM_SCRIPT_PATHS, new String[] {
> >> "src/test/resources" });
> >>
> >>
> >> Am 12.11.2015 um 14:12 schrieb Olivier Austina:
> >>> Hi,
> >>>
> >>> I try to call a simple UIMA ruta script from uimaFIT in java. It works
> in
> >>> plain UIMA but it didn't work in uimaFIT for me.  Here is the script:
> >>>
> >>> PACKAGE tutorial.entity;
> >>> WORDLIST MonthsList = 'month.txt';
> >>> DECLARE Month;
> >>> DECLARE Year;
> >>> DECLARE Date;
> >>> Document{-> MARKFAST(Month, MonthsList )};
> >>> NUM{REGEXP("19..|20..") -> MARK(Year,1,2)};
> >>> Month Year {-> MARK(Date,1,2)};
> >>>
> >>> Here is the java code (based on Ruta doc example):
> >>>
> >>> //System.out.println( "Hello World!" );
> >>>         File specFile = new
> >>>
> >>
> File("/home/olhome/software/workspace/rutatest1/dateproject/descriptor/tutorial/entity/DateEngine.xml");
> >>>             XMLInputSource in = new XMLInputSource(specFile);
> >>>             ResourceSpecifier specifier = UIMAFramework.getXMLParser().
> >>>                 parseResourceSpecifier(in);
> >>>             // for import by name... set the datapath in the
> >> ResourceManager
> >>>             AnalysisEngine ae =
> >>> UIMAFramework.produceAnalysisEngine(specifier);
> >>>             CAS cas = ae.newCAS();
> >>>             cas.setDocumentText("This is my document. March  June
> >>> December");
> >>>             ae.process(cas);
> >>>
> >>>             JCas jcas = cas.getJCas();
> >>>             for (Month month : JCasUtil.select(jcas, Month.class)) {
> >>>                    System.out.println(month.getCoveredText());
> >>>                 }
> >>>
> >>>   This is the pom dependencies:
> >>>
> >>>     <dependency>
> >>>        <groupId>org.apache.uima</groupId>
> >>>        <artifactId>ruta-core</artifactId>
> >>>        <version>2.3.1</version>
> >>>     </dependency>
> >>>
> >>>     <dependency>
> >>>       <groupId>org.apache.uima</groupId>
> >>>       <artifactId>uimafit-core</artifactId>
> >>>       <version>2.1.0</version>
> >>>     </dependency>
> >>>
> >>>
> >>> I have the following error:
> >>>
> >>> Exception in thread "main" java.lang.Error: Unresolved compilation
> >>> problems:
> >>>     Month cannot be resolved to a type
> >>>     Bound mismatch: The generic method select(FSArray, Class<T>) of
> type
> >>> JCasUtil is not applicable for the arguments (JCas, Class<Month>). The
> >>> inferred type Month is not a valid substitute for the bounded parameter
> >> <T
> >>> extends TOP>
> >>>     Month cannot be resolved to a type
> >>>     at tuto.tuto_step0.App.main(App.java:51)
> >>>
> >>>
> >>> It seems that I am not able to correctly import types like in the maven
> >>> example. I am not so familiar with maven. I have put the
> >> DateTypeSystem.xml
> >>> in a folder called tuto under src folder and add the line
> >>> "classpath*:/tuto/DateTypeSystem.xml" in the text file
> >>> src/META-INF/org.apache.uima.fit/types.txt.
> >>>
> >>> Any suggestion is welcome. Thank you.
> >>>
> >>> Regards
> >>> Olivier
> >>>
> >>
>
>

Re: how to call UIMA Ruta from uimaFIT

Posted by Peter Klügl <pe...@averbis.com>.
Hi,

I assume that there are several problems, e.g., the missing JCas cover
classes.

I have taken the liberty to create a project based on your example like
I would use ruta right now (with 2.3.1):
http://people.apache.org/~pkluegl/examples/date-example.zip

- the script file are in src/main/ruta
- the wordlist file is in src/main/resources
- the descriptors are generated to target/generated-sources/ruta
- the JCas cover classes are generated to  target/generated-sources/jcasgen
- src/test/java contains two JUnit tests: one based on the generated
descriptor and one based on uimaFIT without ae descriptor

Let me know if this helps and/or you have questions about the project setup.

Best,

Peter

Am 12.11.2015 um 17:04 schrieb Olivier Austina:
> Hi Peter,
>
>
> Thank you for you reply. To answer to your questions:
>
>
> - who created DateTypeSystem.xml? Was it the ruta-maven-plugin or the
> build process of the Ruta Workbench? Did you move the type system
> descriptor, e.g., making the import in the AE descriptor invalid?
>
> DateTypeSystem.xml is created by the Ruta Workbench. I have created the
> project with Ruta Workbench and then try to use it in java program with
> maven. This is the DateTypeSystem.xml file content :
>
> <?xml version="1.0" encoding="UTF-8"?>
> <typeSystemDescription xmlns="http://uima.apache.org/resourceSpecifier">
>     <name>tutorial.entity.DateTypeSystem</name>
>     <imports>
>         <import location="../../BasicTypeSystem.xml"/>
>     </imports>
>     <types>
>         <typeDescription>
>             <name>tutorial.entity.Date.Month</name>
>             <description>Type defined in tutorial.entity.Date</description>
>             <supertypeName>uima.tcas.Annotation</supertypeName>
>         </typeDescription>
>         <typeDescription>
>             <name>tutorial.entity.Date.Year</name>
>             <description>Type defined in tutorial.entity.Date</description>
>             <supertypeName>uima.tcas.Annotation</supertypeName>
>         </typeDescription>
>         <typeDescription>
>             <name>tutorial.entity.Date.Date</name>
>             <description>Type defined in tutorial.entity.Date</description>
>             <supertypeName>uima.tcas.Annotation</supertypeName>
>         </typeDescription>
>     </types>
> </typeSystemDescription>
>
> - did you include the jcasgen-maven-plugin in your pom? Or did you use
> the Component Descriptor Editor to create JCas cover classes.
>
> No I didn't use it. I have only create a simple maven project with eclipse
> and try to call UIMA Ruta with uimaFIT.
>
> - the error messages indicate that the type system import of your
> analysis engine has some problems and that the Month type is not
> resolved. Furthermore,tThe Month class (JCas cover class for the type)
> is missing. Either there was already a class or JCasGen was not executed.
>
> Can you provide the complete pom and a short description of the layout
> of your project?
>
> This is the pom:
>
> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="
> http://www.w3.org/2001/XMLSchema-instance"
>   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
> http://maven.apache.org/xsd/maven-4.0.0.xsd">
>   <modelVersion>4.0.0</modelVersion>
>
>   <groupId>tuto</groupId>
>   <artifactId>tuto-step0</artifactId>
>   <version>0.0.1-SNAPSHOT</version>
>   <packaging>jar</packaging>
>
>   <name>tuto-step0</name>
>   <url>http://maven.apache.org</url>
>
>   <properties>
>     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
>   </properties>
>
>   <dependencies>
>     <dependency>
>        <groupId>org.apache.uima</groupId>
>        <artifactId>ruta-core</artifactId>
>        <version>2.3.1</version>
>     </dependency>
>
>     <dependency>
>       <groupId>org.apache.uima</groupId>
>       <artifactId>uimafit-core</artifactId>
>       <version>2.1.0</version>
>     </dependency>
>     <dependency>
>       <groupId>junit</groupId>
>       <artifactId>junit</artifactId>
>       <version>3.8.1</version>
>       <scope>test</scope>
>     </dependency>
>   </dependencies>
> </project>
>
> This is java code with imports:
>
> package tuto.tuto_step0;
>
> import java.io.File;
> import java.io.IOException;
>
> import org.apache.uima.UIMAFramework;
> import org.apache.uima.analysis_engine.AnalysisEngine;
> import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
> import org.apache.uima.cas.CAS;
> import org.apache.uima.cas.CASException;
> import org.apache.uima.cas.text.AnnotationFS;
> import org.apache.uima.cas.text.AnnotationIndex;
> import org.apache.uima.fit.util.ContainmentIndex.Type;
> import org.apache.uima.fit.util.JCasUtil;
> import org.apache.uima.jcas.JCas;
> import org.apache.uima.resource.ResourceInitializationException;
> import org.apache.uima.resource.ResourceSpecifier;
> import org.apache.uima.util.InvalidXMLException;
> import org.apache.uima.util.XMLInputSource;
>
>
>
> public class App
> {
>     public static void main( String[] args ) throws IOException,
> InvalidXMLException, ResourceInitializationException,
> AnalysisEngineProcessException, CASException
>     {
>         //System.out.println( "Hello World!" );
>         File specFile = new
> File("/home/olhome/software/workspace/rutatest1/dateproject/descriptor/tutorial/entity/DateEngine.xml");
>             XMLInputSource in = new XMLInputSource(specFile);
>             ResourceSpecifier specifier = UIMAFramework.getXMLParser().
>                 parseResourceSpecifier(in);
>             // for import by name... set the datapath in the ResourceManager
>             AnalysisEngine ae =
> UIMAFramework.produceAnalysisEngine(specifier);
>             CAS cas = ae.newCAS();
>             cas.setDocumentText("This is my document. March  June
> December");
>             ae.process(cas);
>             // For plain UIMA
>             /*
>             org.apache.uima.cas.Type monthType =
> cas.getTypeSystem().getType("tutorial.entity.Date.Month");
>             AnnotationIndex<AnnotationFS> annotationIndex =
>             cas.getAnnotationIndex(monthType);
>             for (AnnotationFS each : annotationIndex) {
>               System.out.println(each.getCoveredText());
>             }
>             */
>
>             JCas jcas = cas.getJCas();
>             for (Month month : JCasUtil.select(jcas, Month.class)) {
>                    System.out.println(month.getCoveredText());
>                 }
>
>
>     }
> }
>
> Thank you.
>
> Regards
> Olivier
>
>
> 2015-11-12 14:35 GMT+01:00 Peter Klügl <pe...@averbis.com>:
>
>> Hi,
>>
>> here a few fast comments and questions:
>> - the example code uses uimaFIT only for the select, but not for the
>> creation/initialization of the components/CAS. Thus,
>> org.apache.uima.fit/types.txt won't help much. However, the types should
>> be included by the import in the AE.
>> - who created DateTypeSystem.xml? Was it the ruta-maven-plugin or the
>> build process of the Ruta Workbench? Did you move the type system
>> descriptor, e.g., making the import in the AE descriptor invalid?
>> - did you include the jcasgen-maven-plugin in your pom? Or did you use
>> the Component Descriptor Editor to create JCas cover classes.
>> - the error messages indicate that the type system import of your
>> analysis engine has some problems and that the Month type is not
>> resolved. Furthermore,tThe Month class (JCas cover class for the type)
>> is missing. Either there was already a class or JCasGen was not executed.
>>
>> Can you provide the complete pom and a short description of the layout
>> of your project?
>>
>> Best,
>>
>> Peter
>>
>> PS: a uimaFIT like approach for creating a Ruta engine could look like
>> (whereas direct initialization of AE should be avoided in general):
>> AnalysisEngine ae = createEngine(RutaEngine.class,
>>             RutaEngine.PARAM_MAIN_SCRIPT,
>> "org.apache.uima.ruta.engine.UimafitTest",
>>             RutaEngine.PARAM_SCRIPT_PATHS, new String[] {
>> "src/test/resources" });
>>
>>
>> Am 12.11.2015 um 14:12 schrieb Olivier Austina:
>>> Hi,
>>>
>>> I try to call a simple UIMA ruta script from uimaFIT in java. It works in
>>> plain UIMA but it didn't work in uimaFIT for me.  Here is the script:
>>>
>>> PACKAGE tutorial.entity;
>>> WORDLIST MonthsList = 'month.txt';
>>> DECLARE Month;
>>> DECLARE Year;
>>> DECLARE Date;
>>> Document{-> MARKFAST(Month, MonthsList )};
>>> NUM{REGEXP("19..|20..") -> MARK(Year,1,2)};
>>> Month Year {-> MARK(Date,1,2)};
>>>
>>> Here is the java code (based on Ruta doc example):
>>>
>>> //System.out.println( "Hello World!" );
>>>         File specFile = new
>>>
>> File("/home/olhome/software/workspace/rutatest1/dateproject/descriptor/tutorial/entity/DateEngine.xml");
>>>             XMLInputSource in = new XMLInputSource(specFile);
>>>             ResourceSpecifier specifier = UIMAFramework.getXMLParser().
>>>                 parseResourceSpecifier(in);
>>>             // for import by name... set the datapath in the
>> ResourceManager
>>>             AnalysisEngine ae =
>>> UIMAFramework.produceAnalysisEngine(specifier);
>>>             CAS cas = ae.newCAS();
>>>             cas.setDocumentText("This is my document. March  June
>>> December");
>>>             ae.process(cas);
>>>
>>>             JCas jcas = cas.getJCas();
>>>             for (Month month : JCasUtil.select(jcas, Month.class)) {
>>>                    System.out.println(month.getCoveredText());
>>>                 }
>>>
>>>   This is the pom dependencies:
>>>
>>>     <dependency>
>>>        <groupId>org.apache.uima</groupId>
>>>        <artifactId>ruta-core</artifactId>
>>>        <version>2.3.1</version>
>>>     </dependency>
>>>
>>>     <dependency>
>>>       <groupId>org.apache.uima</groupId>
>>>       <artifactId>uimafit-core</artifactId>
>>>       <version>2.1.0</version>
>>>     </dependency>
>>>
>>>
>>> I have the following error:
>>>
>>> Exception in thread "main" java.lang.Error: Unresolved compilation
>>> problems:
>>>     Month cannot be resolved to a type
>>>     Bound mismatch: The generic method select(FSArray, Class<T>) of type
>>> JCasUtil is not applicable for the arguments (JCas, Class<Month>). The
>>> inferred type Month is not a valid substitute for the bounded parameter
>> <T
>>> extends TOP>
>>>     Month cannot be resolved to a type
>>>     at tuto.tuto_step0.App.main(App.java:51)
>>>
>>>
>>> It seems that I am not able to correctly import types like in the maven
>>> example. I am not so familiar with maven. I have put the
>> DateTypeSystem.xml
>>> in a folder called tuto under src folder and add the line
>>> "classpath*:/tuto/DateTypeSystem.xml" in the text file
>>> src/META-INF/org.apache.uima.fit/types.txt.
>>>
>>> Any suggestion is welcome. Thank you.
>>>
>>> Regards
>>> Olivier
>>>
>>


Re: how to call UIMA Ruta from uimaFIT

Posted by Olivier Austina <ol...@gmail.com>.
Hi Peter,


Thank you for you reply. To answer to your questions:


- who created DateTypeSystem.xml? Was it the ruta-maven-plugin or the
build process of the Ruta Workbench? Did you move the type system
descriptor, e.g., making the import in the AE descriptor invalid?

DateTypeSystem.xml is created by the Ruta Workbench. I have created the
project with Ruta Workbench and then try to use it in java program with
maven. This is the DateTypeSystem.xml file content :

<?xml version="1.0" encoding="UTF-8"?>
<typeSystemDescription xmlns="http://uima.apache.org/resourceSpecifier">
    <name>tutorial.entity.DateTypeSystem</name>
    <imports>
        <import location="../../BasicTypeSystem.xml"/>
    </imports>
    <types>
        <typeDescription>
            <name>tutorial.entity.Date.Month</name>
            <description>Type defined in tutorial.entity.Date</description>
            <supertypeName>uima.tcas.Annotation</supertypeName>
        </typeDescription>
        <typeDescription>
            <name>tutorial.entity.Date.Year</name>
            <description>Type defined in tutorial.entity.Date</description>
            <supertypeName>uima.tcas.Annotation</supertypeName>
        </typeDescription>
        <typeDescription>
            <name>tutorial.entity.Date.Date</name>
            <description>Type defined in tutorial.entity.Date</description>
            <supertypeName>uima.tcas.Annotation</supertypeName>
        </typeDescription>
    </types>
</typeSystemDescription>

- did you include the jcasgen-maven-plugin in your pom? Or did you use
the Component Descriptor Editor to create JCas cover classes.

No I didn't use it. I have only create a simple maven project with eclipse
and try to call UIMA Ruta with uimaFIT.

- the error messages indicate that the type system import of your
analysis engine has some problems and that the Month type is not
resolved. Furthermore,tThe Month class (JCas cover class for the type)
is missing. Either there was already a class or JCasGen was not executed.

Can you provide the complete pom and a short description of the layout
of your project?

This is the pom:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>tuto</groupId>
  <artifactId>tuto-step0</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>tuto-step0</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
       <groupId>org.apache.uima</groupId>
       <artifactId>ruta-core</artifactId>
       <version>2.3.1</version>
    </dependency>

    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimafit-core</artifactId>
      <version>2.1.0</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

This is java code with imports:

package tuto.tuto_step0;

import java.io.File;
import java.io.IOException;

import org.apache.uima.UIMAFramework;
import org.apache.uima.analysis_engine.AnalysisEngine;
import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
import org.apache.uima.cas.CAS;
import org.apache.uima.cas.CASException;
import org.apache.uima.cas.text.AnnotationFS;
import org.apache.uima.cas.text.AnnotationIndex;
import org.apache.uima.fit.util.ContainmentIndex.Type;
import org.apache.uima.fit.util.JCasUtil;
import org.apache.uima.jcas.JCas;
import org.apache.uima.resource.ResourceInitializationException;
import org.apache.uima.resource.ResourceSpecifier;
import org.apache.uima.util.InvalidXMLException;
import org.apache.uima.util.XMLInputSource;



public class App
{
    public static void main( String[] args ) throws IOException,
InvalidXMLException, ResourceInitializationException,
AnalysisEngineProcessException, CASException
    {
        //System.out.println( "Hello World!" );
        File specFile = new
File("/home/olhome/software/workspace/rutatest1/dateproject/descriptor/tutorial/entity/DateEngine.xml");
            XMLInputSource in = new XMLInputSource(specFile);
            ResourceSpecifier specifier = UIMAFramework.getXMLParser().
                parseResourceSpecifier(in);
            // for import by name... set the datapath in the ResourceManager
            AnalysisEngine ae =
UIMAFramework.produceAnalysisEngine(specifier);
            CAS cas = ae.newCAS();
            cas.setDocumentText("This is my document. March  June
December");
            ae.process(cas);
            // For plain UIMA
            /*
            org.apache.uima.cas.Type monthType =
cas.getTypeSystem().getType("tutorial.entity.Date.Month");
            AnnotationIndex<AnnotationFS> annotationIndex =
            cas.getAnnotationIndex(monthType);
            for (AnnotationFS each : annotationIndex) {
              System.out.println(each.getCoveredText());
            }
            */

            JCas jcas = cas.getJCas();
            for (Month month : JCasUtil.select(jcas, Month.class)) {
                   System.out.println(month.getCoveredText());
                }


    }
}

Thank you.

Regards
Olivier


2015-11-12 14:35 GMT+01:00 Peter Klügl <pe...@averbis.com>:

> Hi,
>
> here a few fast comments and questions:
> - the example code uses uimaFIT only for the select, but not for the
> creation/initialization of the components/CAS. Thus,
> org.apache.uima.fit/types.txt won't help much. However, the types should
> be included by the import in the AE.
> - who created DateTypeSystem.xml? Was it the ruta-maven-plugin or the
> build process of the Ruta Workbench? Did you move the type system
> descriptor, e.g., making the import in the AE descriptor invalid?
> - did you include the jcasgen-maven-plugin in your pom? Or did you use
> the Component Descriptor Editor to create JCas cover classes.
> - the error messages indicate that the type system import of your
> analysis engine has some problems and that the Month type is not
> resolved. Furthermore,tThe Month class (JCas cover class for the type)
> is missing. Either there was already a class or JCasGen was not executed.
>
> Can you provide the complete pom and a short description of the layout
> of your project?
>
> Best,
>
> Peter
>
> PS: a uimaFIT like approach for creating a Ruta engine could look like
> (whereas direct initialization of AE should be avoided in general):
> AnalysisEngine ae = createEngine(RutaEngine.class,
>             RutaEngine.PARAM_MAIN_SCRIPT,
> "org.apache.uima.ruta.engine.UimafitTest",
>             RutaEngine.PARAM_SCRIPT_PATHS, new String[] {
> "src/test/resources" });
>
>
> Am 12.11.2015 um 14:12 schrieb Olivier Austina:
> > Hi,
> >
> > I try to call a simple UIMA ruta script from uimaFIT in java. It works in
> > plain UIMA but it didn't work in uimaFIT for me.  Here is the script:
> >
> > PACKAGE tutorial.entity;
> > WORDLIST MonthsList = 'month.txt';
> > DECLARE Month;
> > DECLARE Year;
> > DECLARE Date;
> > Document{-> MARKFAST(Month, MonthsList )};
> > NUM{REGEXP("19..|20..") -> MARK(Year,1,2)};
> > Month Year {-> MARK(Date,1,2)};
> >
> > Here is the java code (based on Ruta doc example):
> >
> > //System.out.println( "Hello World!" );
> >         File specFile = new
> >
> File("/home/olhome/software/workspace/rutatest1/dateproject/descriptor/tutorial/entity/DateEngine.xml");
> >             XMLInputSource in = new XMLInputSource(specFile);
> >             ResourceSpecifier specifier = UIMAFramework.getXMLParser().
> >                 parseResourceSpecifier(in);
> >             // for import by name... set the datapath in the
> ResourceManager
> >             AnalysisEngine ae =
> > UIMAFramework.produceAnalysisEngine(specifier);
> >             CAS cas = ae.newCAS();
> >             cas.setDocumentText("This is my document. March  June
> > December");
> >             ae.process(cas);
> >
> >             JCas jcas = cas.getJCas();
> >             for (Month month : JCasUtil.select(jcas, Month.class)) {
> >                    System.out.println(month.getCoveredText());
> >                 }
> >
> >   This is the pom dependencies:
> >
> >     <dependency>
> >        <groupId>org.apache.uima</groupId>
> >        <artifactId>ruta-core</artifactId>
> >        <version>2.3.1</version>
> >     </dependency>
> >
> >     <dependency>
> >       <groupId>org.apache.uima</groupId>
> >       <artifactId>uimafit-core</artifactId>
> >       <version>2.1.0</version>
> >     </dependency>
> >
> >
> > I have the following error:
> >
> > Exception in thread "main" java.lang.Error: Unresolved compilation
> > problems:
> >     Month cannot be resolved to a type
> >     Bound mismatch: The generic method select(FSArray, Class<T>) of type
> > JCasUtil is not applicable for the arguments (JCas, Class<Month>). The
> > inferred type Month is not a valid substitute for the bounded parameter
> <T
> > extends TOP>
> >     Month cannot be resolved to a type
> >     at tuto.tuto_step0.App.main(App.java:51)
> >
> >
> > It seems that I am not able to correctly import types like in the maven
> > example. I am not so familiar with maven. I have put the
> DateTypeSystem.xml
> > in a folder called tuto under src folder and add the line
> > "classpath*:/tuto/DateTypeSystem.xml" in the text file
> > src/META-INF/org.apache.uima.fit/types.txt.
> >
> > Any suggestion is welcome. Thank you.
> >
> > Regards
> > Olivier
> >
>
>

Re: how to call UIMA Ruta from uimaFIT

Posted by Peter Klügl <pe...@averbis.com>.
Hi,

here a few fast comments and questions:
- the example code uses uimaFIT only for the select, but not for the
creation/initialization of the components/CAS. Thus,
org.apache.uima.fit/types.txt won't help much. However, the types should
be included by the import in the AE.
- who created DateTypeSystem.xml? Was it the ruta-maven-plugin or the
build process of the Ruta Workbench? Did you move the type system
descriptor, e.g., making the import in the AE descriptor invalid?
- did you include the jcasgen-maven-plugin in your pom? Or did you use
the Component Descriptor Editor to create JCas cover classes.
- the error messages indicate that the type system import of your
analysis engine has some problems and that the Month type is not
resolved. Furthermore,tThe Month class (JCas cover class for the type)
is missing. Either there was already a class or JCasGen was not executed.

Can you provide the complete pom and a short description of the layout
of your project?

Best,

Peter

PS: a uimaFIT like approach for creating a Ruta engine could look like
(whereas direct initialization of AE should be avoided in general):  
AnalysisEngine ae = createEngine(RutaEngine.class,
            RutaEngine.PARAM_MAIN_SCRIPT,
"org.apache.uima.ruta.engine.UimafitTest",
            RutaEngine.PARAM_SCRIPT_PATHS, new String[] {
"src/test/resources" });


Am 12.11.2015 um 14:12 schrieb Olivier Austina:
> Hi,
>
> I try to call a simple UIMA ruta script from uimaFIT in java. It works in
> plain UIMA but it didn't work in uimaFIT for me.  Here is the script:
>
> PACKAGE tutorial.entity;
> WORDLIST MonthsList = 'month.txt';
> DECLARE Month;
> DECLARE Year;
> DECLARE Date;
> Document{-> MARKFAST(Month, MonthsList )};
> NUM{REGEXP("19..|20..") -> MARK(Year,1,2)};
> Month Year {-> MARK(Date,1,2)};
>
> Here is the java code (based on Ruta doc example):
>
> //System.out.println( "Hello World!" );
>         File specFile = new
> File("/home/olhome/software/workspace/rutatest1/dateproject/descriptor/tutorial/entity/DateEngine.xml");
>             XMLInputSource in = new XMLInputSource(specFile);
>             ResourceSpecifier specifier = UIMAFramework.getXMLParser().
>                 parseResourceSpecifier(in);
>             // for import by name... set the datapath in the ResourceManager
>             AnalysisEngine ae =
> UIMAFramework.produceAnalysisEngine(specifier);
>             CAS cas = ae.newCAS();
>             cas.setDocumentText("This is my document. March  June
> December");
>             ae.process(cas);
>
>             JCas jcas = cas.getJCas();
>             for (Month month : JCasUtil.select(jcas, Month.class)) {
>                    System.out.println(month.getCoveredText());
>                 }
>
>   This is the pom dependencies:
>
>     <dependency>
>        <groupId>org.apache.uima</groupId>
>        <artifactId>ruta-core</artifactId>
>        <version>2.3.1</version>
>     </dependency>
>
>     <dependency>
>       <groupId>org.apache.uima</groupId>
>       <artifactId>uimafit-core</artifactId>
>       <version>2.1.0</version>
>     </dependency>
>
>
> I have the following error:
>
> Exception in thread "main" java.lang.Error: Unresolved compilation
> problems:
>     Month cannot be resolved to a type
>     Bound mismatch: The generic method select(FSArray, Class<T>) of type
> JCasUtil is not applicable for the arguments (JCas, Class<Month>). The
> inferred type Month is not a valid substitute for the bounded parameter <T
> extends TOP>
>     Month cannot be resolved to a type
>     at tuto.tuto_step0.App.main(App.java:51)
>
>
> It seems that I am not able to correctly import types like in the maven
> example. I am not so familiar with maven. I have put the DateTypeSystem.xml
> in a folder called tuto under src folder and add the line
> "classpath*:/tuto/DateTypeSystem.xml" in the text file
> src/META-INF/org.apache.uima.fit/types.txt.
>
> Any suggestion is welcome. Thank you.
>
> Regards
> Olivier
>