【发布时间】:2016-11-24 07:23:27
【问题描述】:
我使用 Ruta 注释框架来注释输入文本,之前我使用的是类路径中的 Ruta 脚本。但是根据客户的要求,我们必须将 Ruta 脚本移出代码之外,所有这些都需要与系统解耦。我可以实现这一切。我正在做的是在系统启动时,我正在读取所有引擎和脚本资源并缓存到 goggle gauvas 缓存中,一切正常。唯一的问题是有时在运行批处理(并发进程)时 Ruta 框架抛出异常。
参见下面的堆栈跟踪。
Caused by: java.lang.IllegalArgumentException: Document is ambiguous, use one of the following instead : org.apache.uima.ruta.type.Document uima.tcas.DocumentAnnotation
at org.apache.uima.ruta.RutaEnvironment.getType(RutaEnvironment.java:367)
at org.apache.uima.ruta.RutaEnvironment.getType(RutaEnvironment.java:376)
at org.apache.uima.ruta.RutaEnvironment.getType(RutaEnvironment.java:376)
at org.apache.uima.ruta.expression.type.SimpleTypeExpression.getType(SimpleTypeExpression.java:45)
at org.apache.uima.ruta.rule.RutaTypeMatcher.getType(RutaTypeMatcher.java:247)
at org.apache.uima.ruta.rule.RutaTypeMatcher.getTypes(RutaTypeMatcher.java:262)
at org.apache.uima.ruta.rule.RutaTypeMatcher.getMatchingAnnotations(RutaTypeMatcher.java:58)
at org.apache.uima.ruta.rule.RutaRuleElement.getAnchors(RutaRuleElement.java:52)
at org.apache.uima.ruta.rule.RutaRuleElement.startMatch(RutaRuleElement.java:59)
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.RutaScriptBlock.apply(RutaScriptBlock.java:63)
at org.apache.uima.ruta.action.CallAction.callScript(CallAction.java:96)
at org.apache.uima.ruta.action.CallAction.execute(CallAction.java:78)
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:554)
at org.apache.uima.ruta.rule.AbstractRuleElement.doneMatching(AbstractRuleElement.java:84)
at org.apache.uima.ruta.rule.ComposedRuleElement.fallback(ComposedRuleElement.java:475)
at org.apache.uima.ruta.rule.ComposedRuleElement.fallbackContinue(ComposedRuleElement.java:384)
at org.apache.uima.ruta.rule.RutaRuleElement.startMatch(RutaRuleElement.java:100)
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:477)
... 22 more
PS:当我为单个实例运行批处理时,我会遇到这个问题;
【问题讨论】:
-
我假设你使用 ruta
-
@PeterKluegl 根据你的说法,我正在使用 2.2.0 文档已在 2.5.0 中删除,所以我认为这不会造成问题。
-
是和不是。问题是短名称存在冲突。发生异常是因为类型在那里。 DocumentAnnotation 有 Document 的别名。结果,脚本无法解析给定字符串“Document”的类型
-
如果有一些包含不同版本的附加库,你能检查依赖关系吗?
-
您建议的更改现在运行良好,我将检查其他 lib 依赖项