我正在使用 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:当我运行批次而不是单个实例时,我遇到这个问题;
我对 NUM、SPECIAL 等预定义类型也有同样的问题。 我将 ruta 中的 bibtex-examples 集成到我的管道中,并尝试像答案 1 中那样调用 rutaEngine(只是 Year 脚本)。 我还使用 DKPro core.opennlp.OpenNlpSegmenter。 运行脚本时,我遇到了与原始问题类似的错误:
Caused by: java.lang.IllegalArgumentException: NUM is ambiguous, use one of
the following instead : de.tudarmstadt.ukp.dkpro.core.api.syntax.type.dependency.NUM
org.apache.uima.ruta.type.NUM
at org.apache.uima.ruta.RutaEnvironment.getType(RutaEnvironment.java:459)
另一个问题是我无法在“aaa”-> Marker 等语句中声明自己的“临时”类型(例如“Marker”)。 错误显示“无法解析类型:标记 它在 RUTA 项目内部运行良好,但在我的“真实”项目之外则不然。
@Gaurav 这个问题解决了吗,因为我仍然使用 3x 版本的 ruta?