我试图从UIMA RUTA内调用ClearTK的StanfordCoreNLPAnnotator,但无法使其正常工作。我在启用Maven的RUTA项目中使用eclipse,在该项目中,我也有用于辅助任务的Java代码。我已经使用Maven导入了cleartk-stanford-corenlp 0.8。

我尝试在脚本中使用此行:

ENGINE utils.MyStanfordEngine;

...其中utils / MyStanfordEngine.xml是使用以下Java代码创建的XML描述符文件:
MyStanfordAnnotator.getDescription().toXML(new FileOutputStream("descriptor/utils/MyStanfordEngine.xml"));

没有错误出现,但是执行后我得到:
Exception in thread "main" org.apache.uima.resource.ResourceInitializationException: Initialization of annotator class ... failed.
(Descriptor: file:.../descriptor/mainScriptEngine.xml)
...
Caused by: org.apache.uima.resource.ResourceInitializationException: Annotator class
"org.cleartk.stanford.StanfordCoreNLPAnnotator" was not found.
(Descriptor: file:.../descriptor/utils/MyStanfordEngine.xml)
...

我想我知道RUTA项目在Maven依赖项中找不到它,但是由于协作目的,我需要坚持使用Maven作为我的依赖项工具。

有人可以帮忙吗?

更新:

遇到问题时,我正在使用RUTA 2.1.0。从那时起,我已经更新到2.2.0rc1,但是问题仍然存在。

在下面Peter的建议(谢谢!)中,在Java构建路径中,我引用了一个空白的启用Maven的Java项目,该项目仅导入cleartk-stanford-corenlp 0.8。我现在可以运行以下RUTA代码:
TYPESYSTEM utils.CleartkRutaTypeSystem;
ENGINE utils.MyStanfordEngine;
Document{-> CALL(MyStanfordEngine)};

...成功完成了输入文件夹中所有文档的所有预期注解,但最终由于以下异常而崩溃:
[Stanford Tools Logging output ...]
22.02.2014 12:44:22 org.apache.uima.analysis_engine.impl.PrimitiveAnalysisEngine_impl        callAnalysisComponentProcess(406)
SCHWERWIEGEND: Exception occurred
org.apache.uima.analysis_engine.AnalysisEngineProcessException: Annotator processing failed.
at org.apache.uima.ruta.engine.RutaEngine.process(RutaEngine.java:477)
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:374)
at org.apache.uima.analysis_engine.impl.PrimitiveAnalysisEngine_impl.processAndOutputNewCASes(PrimitiveAnalysisEngine_impl.java:298)
at org.apache.uima.analysis_engine.impl.AnalysisEngineImplBase.process(AnalysisEngineImplBase.java:267)
at org.apache.uima.ruta.ide.launching.RutaLauncher.processFile(RutaLauncher.java:168)
at org.apache.uima.ruta.ide.launching.RutaLauncher.main(RutaLauncher.java:129)
Caused by: java.lang.NullPointerException
at org.apache.uima.cas.impl.CASImpl.createFS(CASImpl.java:483)
at org.apache.uima.cas.impl.CASImpl.createAnnotation(CASImpl.java:3837)
at org.apache.uima.ruta.action.CallAction.callEngine(CallAction.java:192)
at org.apache.uima.ruta.action.CallAction.execute(CallAction.java:62)
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:547)
at org.apache.uima.ruta.rule.AbstractRuleElement.doneMatching(AbstractRuleElement.java:84)
at org.apache.uima.ruta.rule.ComposedRuleElement.fallback(ComposedRuleElement.java:468)
at org.apache.uima.ruta.rule.ComposedRuleElement.fallbackContinue(ComposedRuleElement.java:377)
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:475)
... 6 more
Exception in thread "main" org.apache.uima.analysis_engine.AnalysisEngineProcessException: Annotator processing failed.
at org.apache.uima.ruta.engine.RutaEngine.process(RutaEngine.java:477)
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:374)
at org.apache.uima.analysis_engine.impl.PrimitiveAnalysisEngine_impl.processAndOutputNewCASes(PrimitiveAnalysisEngine_impl.java:298)
at org.apache.uima.analysis_engine.impl.AnalysisEngineImplBase.process(AnalysisEngineImplBase.java:267)
at org.apache.uima.ruta.ide.launching.RutaLauncher.processFile(RutaLauncher.java:168)
at org.apache.uima.ruta.ide.launching.RutaLauncher.main(RutaLauncher.java:129)
Caused by: java.lang.NullPointerException
at org.apache.uima.cas.impl.CASImpl.createFS(CASImpl.java:483)
at org.apache.uima.cas.impl.CASImpl.createAnnotation(CASImpl.java:3837)
at org.apache.uima.ruta.action.CallAction.callEngine(CallAction.java:192)
at org.apache.uima.ruta.action.CallAction.execute(CallAction.java:62)
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:547)
at org.apache.uima.ruta.rule.AbstractRuleElement.doneMatching(AbstractRuleElement.java:84)
at org.apache.uima.ruta.rule.ComposedRuleElement.fallback(ComposedRuleElement.java:468)
at org.apache.uima.ruta.rule.ComposedRuleElement.fallbackContinue(ComposedRuleElement.java:377)
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:475)
... 6 more

对整个堆栈跟踪感到抱歉,但是我认为如果RUTA开发人员正在阅读本文,他们可能会想要整个东西。

有办法解决吗?我究竟做错了什么?

最佳答案

有几个限制要考虑:

  • UIMA Ruta 2.1.0不支持mixin项目:需要在另一个项目中指定maven依赖项。然后,Ruta项目必须依赖于其他java项目。
  • UIMA Ruta Workbench 2.1.0在验证导入的类型系统时会遇到一些问题,该系统再次按名称导入其他类型的系统。在这里,应该使用按位置导入。
  • UIMA CAS Editor 2.5.0在使用数据路径解决类型系统导入方面存在一些问题,如果类型系统描述符需要数据路径等其他信息,则在可视化创建的注释时会出现问题。在这里,脚本类型系统描述符的创建应包括(不仅是导入)所有类型的导入类型系统。可以在首选项中进行配置(我已经有一段时间没有使用它了)。通过使用按位置导入,可以再次避免此问题。
  • UIMA Ruta 2.2.0支持mixin项目。在这里,仅CAS编辑器存在问题。

  • 可以通过以下方式(使用UIMA Ruta 2.2.0)创建描述的项目:
  • 创建一个新的UIMA Ruta项目
  • 使其成为Maven项目:弹出->配置->转换为Maven项目
  • 在pom中向cleartk-stanford-corenlp添加依赖项
    <dependency>
    <groupId>org.cleartk</groupId>
    <artifactId>cleartk-stanford-corenlp</artifactId>
    <version>0.8.0</version>
    </dependency>
    
  • 在描述符文件夹或从属项目中提供类型系统,例如,将orgcleartk-type-system-1.2.0文件夹复制到描述符文件夹。请注意,如果不修改描述符,CAS编辑器将无法解决导入问题。
  • 创建一个简单的脚本,该脚本可以导入类型系统,导入分析引擎并执行分析引擎。在这里,直接导入uimaFIT组件而不是描述符。如果以后的规则应该能够对导入的分析引擎的结果进行操作,则需要用有趣的类型扩展EXEC操作。
    TYPESYSTEM org.cleartk.TypeSystem;
    UIMAFIT org.cleartk.stanford.StanfordCoreNLPAnnotator;
    Document{->EXEC(StanfordCoreNLPAnnotator)};
    
  • 如果导入文件夹中有一个文本文件,则运行此脚本应该能够对其进行注释。

  • 本示例直接使用StanfordCoreNLPAnnotator而不是附加的分析引擎,但是切换到另一个实现或分析引擎应该很简单。

    关于stanford-nlp - 从UIMA RUTA调用StanfordCoreNLPAnnotator时找不到cleartk依赖项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21947084/

    10-12 22:51