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 <pk...@uni-wuerzburg.de> on 2015/07/11 18:20:56 UTC

Re: [jira] [Commented] (UIMA-4480) Cannot declar new type in Java code to apply Ruta rules

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) <de...@uima.apache.org>
>> 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)