Hello Peter,
Thanks very much for your comments.
Since we need to apply rules containing defining a new type in java code, I
would like to choose the first option you provided as below:
generate the type system for the script and use it when creating the CAS
I am not familiar with the UIMA source code and interface, could you please
give me some example code snippets to dynamically create a new type defined in
the script using java code?
I also have another question, we define a dynamic feature (using json in the
code ) in a type defined in the type system, when we were calling method
"setfeature" in the ruta rules, it comes error as below:
Jun 25, 2015 1:31:45 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 assign feature value
(e.g., coveredText).
at
org.apache.uima.ruta.action.SetFeatureAction.execute(SetFeatureAction.java:115)
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 assign feature value
(e.g., coveredText).
at
org.apache.uima.ruta.action.SetFeatureAction.execute(SetFeatureAction.java:115)
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
Thanks.
Min
________________________________________
From: Peter Klügl (JIRA) <[email protected]>
Sent: Thursday, June 25, 2015 2:57 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-3D14600836-23comment-2D14600836&d=BQIFaQ&c=6vgNTiRn9_pqCD9hKx9JgXN1VapJQ8JVoF8oWH1AgfQ&r=jz3QK4K87Lm_Nwht1EPnpOuO0lNxA_ixkxTg7PAIq2A&m=mirXZjzV5uoNjKYfVBVQxw6osS2Eu9EVXMmCwfVghdw&s=JUvIkvmlK8d7Wem1kJq-VY2yENmn9uanfoF2qDcdF3c&e=
]
Peter Klügl commented on UIMA-4480:
-----------------------------------
Yes, this is normal behavior. Some explanation from the UIMa perspective
without Ruta:
You create a CAs using a specific type system A and then apply an analysis
engine that uses a type system A+X. When the analysis engine tries to access a
type of X, it fails. It is not (yet) possible in UIMA to introduce new types in
an analysis engine.
In your rule example, X is the "person" type. The exception, however, states
that the rules use an "animal" type that is not present in the type system.
The thing is that you cannot use Ruta.apply() with ruta code continaing declare
statements this way. The declare statements are ignored when executing ruta
rules since they would before have had influenced the type system that is used
to create the CAS. The declare statements are solely used by the ruta workbench
and the ruta maven plugin for generating the corresponding type system
descriptors (there is also java code for creating the java object without an
xml file). These have be considered when the CAs is created, either by using
them in the creation method or by importing them in the analysis engine that
creates the CAS.
What you can do depends on your use case and how you create your CAS:
- generate the type system for the script and use it when creating the CAS
- do not use additional types in the rules in Ruta.apply
- do not use Ruta.apply in your Java code
Does this make sense to you?
Any suggestions to improve this situation are welcome.
> 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=mirXZjzV5uoNjKYfVBVQxw6osS2Eu9EVXMmCwfVghdw&s=Pt8sWS4o5C5FJA10uxN7klLqfr69mexkP3BkHjxr5Vw&e=
> Project: UIMA
> Issue Type: Bug
> Components: ruta
> Affects Versions: 2.2.1ruta
> Reporter: Min Jiang
> Assignee: Peter Klügl
>
> 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)