Hi,

it could work with something like the following code snippet (a unit test I just committed). There could be a problem with the null value for the type system location in factory.createTypeSystemDescription() when you use it with UIMA Ruta 2.3.0 that is not located within a jar (e.g., a local project in your workspace).

Let me know if this works for you.

Best,

Peter

    String script = "DECLARE MyType;\n W{-> MyType};";

    RutaDescriptorFactory factory = new RutaDescriptorFactory();
RutaDescriptorInformation descInfo = factory.parseDescriptorInformation(script);
    RutaBuildOptions options = new RutaBuildOptions();
TypeSystemDescription rutaTSD = factory.createTypeSystemDescription(null, descInfo, options,
            getClass().getClassLoader());
    Collection<TypeSystemDescription> tsds = new ArrayList<>();
TypeSystemDescription classpathTSD = TypeSystemDescriptionFactory.createTypeSystemDescription();
    tsds.add(classpathTSD);
    tsds.add(rutaTSD);
    TypeSystemDescription tsd = CasCreationUtils.mergeTypeSystems(tsds);

    TypePriorities tp = TypePrioritiesFactory.createTypePriorities();
    FsIndexCollection indexes = FsIndexFactory.createFsIndexCollection();
    CAS cas = CasCreationUtils.createCas(tsd, tp, indexes.getFsIndexes());
    cas.setDocumentText("This is a test.");

    Ruta.apply(cas, script);
    Type type = cas.getTypeSystem().getType("Anonymous.MyType");

    assertNotNull(type);
AnnotationIndex<AnnotationFS> annotationIndex = cas.getAnnotationIndex(type);
    assertEquals(4, annotationIndex.size());


Am 30.06.2015 um 08:47 schrieb Peter Klügl:
Hi,

then you have specified the type system lookup in
META-INF/org.apache.uima.fit/types.txt?

You do not want to specify your rules in a separate file? You could then
use the ruta-maven-plugin and include the generated descriptor in your
classpath lookup (I assume). Without files, you need to merge the
typesystem descriptor somehow with the found ones. In both cases,
however, you need to take care of the type priorities. I haven't used
this way yet, so I have to play around a bit in order to learn if
uimaFIT automatically loads the type priotities from the ruta dependency.

I will come up with a working example, but it will take some time (I am
a bit busy this week).

Best,

Peter

Am 29.06.2015 um 16:58 schrieb Min Jiang:
Hi Peter,

Thanks very much for your great comment!

The version we are using 2.2.1.
We use JCasFactory.createJCas (uima fit) to create CAS, could you please share 
an example
on how to call the method  "rutafac.createTypeSystemDescription(ruta, 
descriptorInformation, options, classloader)"

By the way, our code is underdevelopment and will be open source for academic 
use only.

Thanks.
Min
________________________________________
From: Peter Klügl (JIRA) <[email protected]>
Sent: Monday, June 29, 2015 5:02 AM
To: Min Jiang
Subject: [jira] [Commented] (UIMA-4480) Cannot declar new type in Java code to 
apply Ruta rules

     [ 
https://urldefense.proofpoint.com/v2/url?u=https-3A__issues.apache.org_jira_browse_UIMA-2D4480-3Fpage-3Dcom.atlassian.jira.plugin.system.issuetabpanels-3Acomment-2Dtabpanel-26focusedCommentId-3D14605367-23comment-2D14605367&d=BQIFaQ&c=6vgNTiRn9_pqCD9hKx9JgXN1VapJQ8JVoF8oWH1AgfQ&r=jz3QK4K87Lm_Nwht1EPnpOuO0lNxA_ixkxTg7PAIq2A&m=bvQTwuAVAZURKKCWlOG7rWaGKKP6W-qt2XsHFrGcq2g&s=QQVJIdkyei6m2zdU_GR4IYVhPVKTJL07kz3SdLRMRFA&e=
  ]

Peter Klügl commented on UIMA-4480:
-----------------------------------

Much depends on how you use UIMA or to be more precise, on how you create your 
CAS. Do you use, for example, a uimaFIT factory method for creating the CAS, or 
an analysis engine?

If I know how you create your CAS, then I can provide a simpler code snippet :-)

Is you code open source?

Cannot declar new type in Java code to apply Ruta rules
-------------------------------------------------------

                 Key: UIMA-4480
                 URL: 
https://urldefense.proofpoint.com/v2/url?u=https-3A__issues.apache.org_jira_browse_UIMA-2D4480&d=BQIFaQ&c=6vgNTiRn9_pqCD9hKx9JgXN1VapJQ8JVoF8oWH1AgfQ&r=jz3QK4K87Lm_Nwht1EPnpOuO0lNxA_ixkxTg7PAIq2A&m=bvQTwuAVAZURKKCWlOG7rWaGKKP6W-qt2XsHFrGcq2g&s=FeieLlIpo8jt5BnNVS7SJB8vzj0LYqwKV2jYDX5qmxY&e=
             Project: UIMA
          Issue Type: Bug
          Components: ruta
    Affects Versions: 2.2.1ruta
            Reporter: Min Jiang
            Assignee: Peter Klügl
             Fix For: 2.3.1ruta


I used Java code to apply UIMA Ruta rules, but with declare statement, ruta 
cannot recognize the new created annotation type.
Here is the code I used:
String rutaStr2 = "DECLARE person; W{REGEXP(\"Patient\") -> MARK(person)};";
Ruta.apply( aJCas.getCas(), rutaStr2 );
The error is like:
Jun 24, 2015 3:01:07 PM 
org.apache.uima.analysis_engine.impl.PrimitiveAnalysisEngine_impl 
callAnalysisComponentProcess(417)
SEVERE: Exception occurred
org.apache.uima.analysis_engine.AnalysisEngineProcessException: Annotator 
processing failed.
       at org.apache.uima.ruta.engine.RutaEngine.process(RutaEngine.java:496)
       at 
org.apache.uima.analysis_component.JCasAnnotator_ImplBase.process(JCasAnnotator_ImplBase.java:48)
       at 
org.apache.uima.analysis_engine.impl.PrimitiveAnalysisEngine_impl.callAnalysisComponentProcess(PrimitiveAnalysisEngine_impl.java:385)
       at 
org.apache.uima.analysis_engine.impl.PrimitiveAnalysisEngine_impl.processAndOutputNewCASes(PrimitiveAnalysisEngine_impl.java:309)
       at 
org.apache.uima.analysis_engine.impl.AnalysisEngineImplBase.process(AnalysisEngineImplBase.java:267)
       at org.apache.uima.ruta.engine.Ruta.apply(Ruta.java:75)
       at org.apache.uima.ruta.engine.Ruta.apply(Ruta.java:83)
       at 
edu.uth.clamp.nlp.attr.ast.LinearAssertion.main(LinearAssertion.java:610)
Caused by: java.lang.IllegalArgumentException: Not able to resolve type: animal
       at 
org.apache.uima.ruta.expression.type.SimpleTypeExpression.getType(SimpleTypeExpression.java:47)
       at 
org.apache.uima.ruta.action.AbstractMarkAction.createAnnotation(AbstractMarkAction.java:42)
       at org.apache.uima.ruta.action.MarkAction.execute(MarkAction.java:57)
       at 
org.apache.uima.ruta.rule.AbstractRuleElement.apply(AbstractRuleElement.java:130)
       at 
org.apache.uima.ruta.rule.RuleElementCaretaker.applyRuleElements(RuleElementCaretaker.java:111)
       at 
org.apache.uima.ruta.rule.ComposedRuleElement.applyRuleElements(ComposedRuleElement.java:559)
       at 
org.apache.uima.ruta.rule.AbstractRuleElement.doneMatching(AbstractRuleElement.java:84)
       at 
org.apache.uima.ruta.rule.ComposedRuleElement.fallback(ComposedRuleElement.java:480)
       at 
org.apache.uima.ruta.rule.ComposedRuleElement.fallbackContinue(ComposedRuleElement.java:384)
       at 
org.apache.uima.ruta.rule.RutaRuleElement.startMatch(RutaRuleElement.java:106)
       at 
org.apache.uima.ruta.rule.ComposedRuleElement.startMatch(ComposedRuleElement.java:73)
       at org.apache.uima.ruta.rule.RutaRule.apply(RutaRule.java:47)
       at org.apache.uima.ruta.rule.RutaRule.apply(RutaRule.java:40)
       at org.apache.uima.ruta.rule.RutaRule.apply(RutaRule.java:29)
       at org.apache.uima.ruta.RutaScriptBlock.apply(RutaScriptBlock.java:63)
       at org.apache.uima.ruta.RutaModule.apply(RutaModule.java:48)
       at org.apache.uima.ruta.engine.RutaEngine.process(RutaEngine.java:494)
       ... 7 more
org.apache.uima.analysis_engine.AnalysisEngineProcessException: Annotator 
processing failed.
       at org.apache.uima.ruta.engine.RutaEngine.process(RutaEngine.java:496)
       at 
org.apache.uima.analysis_component.JCasAnnotator_ImplBase.process(JCasAnnotator_ImplBase.java:48)
       at 
org.apache.uima.analysis_engine.impl.PrimitiveAnalysisEngine_impl.callAnalysisComponentProcess(PrimitiveAnalysisEngine_impl.java:385)
       at 
org.apache.uima.analysis_engine.impl.PrimitiveAnalysisEngine_impl.processAndOutputNewCASes(PrimitiveAnalysisEngine_impl.java:309)
       at 
org.apache.uima.analysis_engine.impl.AnalysisEngineImplBase.process(AnalysisEngineImplBase.java:267)
       at org.apache.uima.ruta.engine.Ruta.apply(Ruta.java:75)
       at org.apache.uima.ruta.engine.Ruta.apply(Ruta.java:83)
       at 
edu.uth.clamp.nlp.attr.ast.LinearAssertion.main(LinearAssertion.java:610)
Caused by: java.lang.IllegalArgumentException: Not able to resolve type: animal
       at 
org.apache.uima.ruta.expression.type.SimpleTypeExpression.getType(SimpleTypeExpression.java:47)
       at 
org.apache.uima.ruta.action.AbstractMarkAction.createAnnotation(AbstractMarkAction.java:42)
       at org.apache.uima.ruta.action.MarkAction.execute(MarkAction.java:57)
       at 
org.apache.uima.ruta.rule.AbstractRuleElement.apply(AbstractRuleElement.java:130)
       at 
org.apache.uima.ruta.rule.RuleElementCaretaker.applyRuleElements(RuleElementCaretaker.java:111)
       at 
org.apache.uima.ruta.rule.ComposedRuleElement.applyRuleElements(ComposedRuleElement.java:559)
       at 
org.apache.uima.ruta.rule.AbstractRuleElement.doneMatching(AbstractRuleElement.java:84)
       at 
org.apache.uima.ruta.rule.ComposedRuleElement.fallback(ComposedRuleElement.java:480)
       at 
org.apache.uima.ruta.rule.ComposedRuleElement.fallbackContinue(ComposedRuleElement.java:384)
       at 
org.apache.uima.ruta.rule.RutaRuleElement.startMatch(RutaRuleElement.java:106)
       at 
org.apache.uima.ruta.rule.ComposedRuleElement.startMatch(ComposedRuleElement.java:73)
       at org.apache.uima.ruta.rule.RutaRule.apply(RutaRule.java:47)
       at org.apache.uima.ruta.rule.RutaRule.apply(RutaRule.java:40)
       at org.apache.uima.ruta.rule.RutaRule.apply(RutaRule.java:29)
       at org.apache.uima.ruta.RutaScriptBlock.apply(RutaScriptBlock.java:63)
       at org.apache.uima.ruta.RutaModule.apply(RutaModule.java:48)
       at org.apache.uima.ruta.engine.RutaEngine.process(RutaEngine.java:494)
       ... 7 more

--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to