2

我正在开发一个 Maven 项目,该项目动态执行一些 ruta 脚本来注释一些标签并在 java 中处理输出。

现在我想先使用 NLP(主要是 dkpro),然后将输出传递给 ruta 脚本(管道)并进一步处理。如何实现呢?


编辑:

下面是我的新脚本;

    AnalysisEngineDescription pipeline = createEngineDescription(createEngineDescription(OpenNlpSegmenter.class),
            createEngineDescription(OpenNlpPosTagger.class),
            AnalysisEngineFactory.createEngineDescription(RutaEngine.class, RutaEngine.PARAM_MAIN_SCRIPT,
                    "com.textjuicer.ruta.date.Author_updated"),
            createEngineDescription(ConsoleWriter.class));

错误:

无法解析类型:参考

2016 年 5 月 25 日下午 6:45:43 org.apache.uima.analysis_engine.impl.AggregateAnalysisEngine_impl processAndOutputNewCASes(273) 严重:发生异常 org.apache.uima.analysis_engine.AnalysisEngineProcessException:注释器处理失败。
在 org.apache.uima.ruta.engine.RutaEngine.process(RutaEngine.java:563) 在 org.apache.uima.analysis_component.JCasAnnotator_ImplBase.process(JCasAnnotator_ImplBase.java:48) 在 org.apache.uima.analysis_engine.impl .PrimitiveAnalysisEngine_impl.callAnalysisComponentProcess(PrimitiveAnalysisEngine_impl.java:378) at org.apache.uima.analysis_engine.impl.PrimitiveAnalysisEngine_impl.processAndOutputNewCASes(PrimitiveAnalysisEngine_impl.java:298) at org.apache.uima.analysis_engine.asb.impl.ASB_impl$AggregateCasIterator.processUntilNextOutputCas (ASB_impl.java:568) 在 org.apache.uima.analysis_engine.asb.impl.ASB_impl$AggregateCasIterator.(ASB_impl.java:410) 在 org.apache.uima.analysis_engine.asb.impl.ASB_impl.process(ASB_impl. java:343) 在 org.apache.uima.analysis_engine.impl.AggregateAnalysisEngine_impl。processAndOutputNewCASes(AggregateAnalysisEngine_impl.java:265) 在 org.apache.uima.analysis_engine.asb.impl.ASB_impl$AggregateCasIterator.processUntilNextOutputCas(ASB_impl.java:568) 在 org.apache.uima.analysis_engine.asb.impl.ASB_impl$AggregateCasIterator。 (ASB_impl.java:410) 在 org.apache.uima.analysis_engine.asb.impl.ASB_impl.process(ASB_impl.java:343) 在 org.apache.uima.analysis_engine.impl.AggregateAnalysisEngine_impl.processAndOutputNewCASes(AggregateAnalysisEngine_impl.java:265) ) 在 org.apache.uima.fit.pipeline.SimplePipeline.runPipeline(SimplePipeline.java:170) 在 org.apache.uima 的 org.apache.uima.analysis_engine.impl.AnalysisEngineImplBase.process(AnalysisEngineImplBase.java:267)。 fit.pipeline.SimplePipeline.runPipeline(SimplePipeline.java:191) 在 com.textjuicer.ruta.date.ArtifactAnnotator。runNLP(ArtifactAnnotator.java:225) at com.textjuicer.ruta.date.ArtifactAnnotator.getAllAnnotations(ArtifactAnnotator.java:70) at com.textjuicer.ruta.date.ArtifactAnnotator.main(ArtifactAnnotator.java:38) 原因:java .lang.IllegalArgumentException:无法解析类型:在 org.apache.uima.ruta.rule.RegExpRule.getGroup2Types( RegExpRule.java:148) 在 org.apache.uima.ruta.rule.RegExpRule.apply(RegExpRule.java:80) 在 org.apache.uima.ruta.RutaScriptBlock.apply(RutaScriptBlock.java:63) 在 org.apache .uima.ruta.RutaModule.apply(RutaModule.java:48) 在 org.apache.uima.ruta.engine.RutaEngine.process(RutaEngine.java:561) ... 17 更多getAllAnnotations(ArtifactAnnotator.java:70) at com.textjuicer.ruta.date.ArtifactAnnotator.main(ArtifactAnnotator.java:38) 原因:java.lang.IllegalArgumentException:无法解析类型:org.apache.uima 处的参考。 ruta.expression.type.SimpleTypeExpression.getType(SimpleTypeExpression.java:48) 在 org.apache.uima.ruta.rule.RegExpRule.getGroup2Types(RegExpRule.java:148) 在 org.apache.uima.ruta.rule.RegExpRule。在 org.apache.uima.ruta.RutaModule.apply (RutaModule.java:48) 在 org.apache.uima.ruta.RutaModule.apply(RutaModule.java:48) 在 org.apache.uima.ruta.RutaScriptBlock.apply(RutaScriptBlock.java:63) .uima.ruta.engine.RutaEngine.process(RutaEngine.java:561) ... 17 更多getAllAnnotations(ArtifactAnnotator.java:70) at com.textjuicer.ruta.date.ArtifactAnnotator.main(ArtifactAnnotator.java:38) 原因:java.lang.IllegalArgumentException:无法解析类型:org.apache.uima 处的参考。 ruta.expression.type.SimpleTypeExpression.getType(SimpleTypeExpression.java:48) 在 org.apache.uima.ruta.rule.RegExpRule.getGroup2Types(RegExpRule.java:148) 在 org.apache.uima.ruta.rule.RegExpRule。在 org.apache.uima.ruta.RutaModule.apply (RutaModule.java:48) 在 org.apache.uima.ruta.RutaModule.apply(RutaModule.java:48) 在 org.apache.uima.ruta.RutaScriptBlock.apply(RutaScriptBlock.java:63) .uima.ruta.engine.RutaEngine.process(RutaEngine.java:561) ... 17 更多无法解析类型:参考 org.apache.uima.ruta.rule.RegExpRule.getGroup2Types(RegExpRule.java:148) 的 org.apache.uima.ruta.expression.type.SimpleTypeExpression.getType(SimpleTypeExpression.java:48) ) 在 org.apache.uima.ruta.RutaScriptBlock.apply(RutaScriptBlock.java:63) 在 org.apache.uima.ruta 的 org.apache.uima.ruta.rule.RegExpRule.apply(RegExpRule.java:80)。 RutaModule.apply(RutaModule.java:48) 在 org.apache.uima.ruta.engine.RutaEngine.process(RutaEngine.java:561) ... 17 更多无法解析类型:参考 org.apache.uima.ruta.rule.RegExpRule.getGroup2Types(RegExpRule.java:148) 的 org.apache.uima.ruta.expression.type.SimpleTypeExpression.getType(SimpleTypeExpression.java:48) ) 在 org.apache.uima.ruta.RutaScriptBlock.apply(RutaScriptBlock.java:63) 在 org.apache.uima.ruta 的 org.apache.uima.ruta.rule.RegExpRule.apply(RegExpRule.java:80)。 RutaModule.apply(RutaModule.java:48) 在 org.apache.uima.ruta.engine.RutaEngine.process(RutaEngine.java:561) ... 17 更多在 org.apache.uima.ruta.RutaModule.apply(RutaModule.java:48) 在 org.apache.uima.ruta.engine.RutaEngine.process(RutaEngine.java:561) 处申请(RutaScriptBlock.java:63) .. . 17 更多在 org.apache.uima.ruta.RutaModule.apply(RutaModule.java:48) 在 org.apache.uima.ruta.engine.RutaEngine.process(RutaEngine.java:561) 处申请(RutaScriptBlock.java:63) .. . 17 更多

线程“主”org.apache.uima.analysis_engine.AnalysisEngineProcessException 中的异常:注释器处理失败。
在 org.apache.uima.ruta.engine.RutaEngine.process(RutaEngine.java:563) 在 org.apache.uima.analysis_component.JCasAnnotator_ImplBase.process(JCasAnnotator_ImplBase.java:48) 在 org.apache.uima.analysis_engine.impl .PrimitiveAnalysisEngine_impl.callAnalysisComponentProcess(PrimitiveAnalysisEngine_impl.java:378) at org.apache.uima.analysis_engine.impl.PrimitiveAnalysisEngine_impl.processAndOutputNewCASes(PrimitiveAnalysisEngine_impl.java:298) at org.apache.uima.analysis_engine.asb.impl.ASB_impl$AggregateCasIterator.processUntilNextOutputCas (ASB_impl.java:568) 在 org.apache.uima.analysis_engine.asb.impl.ASB_impl$AggregateCasIterator.(ASB_impl.java:410) 在 org.apache.uima.analysis_engine.asb.impl.ASB_impl.process(ASB_impl. java:343) 在 org.apache.uima.analysis_engine.impl.AggregateAnalysisEngine_impl。processAndOutputNewCASes(AggregateAnalysisEngine_impl.java:265) 在 org.apache.uima.analysis_engine.asb.impl.ASB_impl$AggregateCasIterator.processUntilNextOutputCas(ASB_impl.java:568) 在 org.apache.uima.analysis_engine.asb.impl.ASB_impl$AggregateCasIterator。 (ASB_impl.java:410) 在 org.apache.uima.analysis_engine.asb.impl.ASB_impl.process(ASB_impl.java:343) 在 org.apache.uima.analysis_engine.impl.AggregateAnalysisEngine_impl.processAndOutputNewCASes(AggregateAnalysisEngine_impl.java:265) ) 在 org.apache.uima.fit.pipeline.SimplePipeline.runPipeline(SimplePipeline.java:170) 在 org.apache.uima 的 org.apache.uima.analysis_engine.impl.AnalysisEngineImplBase.process(AnalysisEngineImplBase.java:267)。 fit.pipeline.SimplePipeline.runPipeline(SimplePipeline.java:191) 在 com.textjuicer.ruta.date.ArtifactAnnotator。runNLP(ArtifactAnnotator.java:225) at com.textjuicer.ruta.date.ArtifactAnnotator.getAllAnnotations(ArtifactAnnotator.java:70) at com.textjuicer.ruta.date.ArtifactAnnotator.main(ArtifactAnnotator.java:38) 原因:java .lang.IllegalArgumentException:无法解析类型:在 org.apache.uima.ruta.rule.RegExpRule.getGroup2Types( RegExpRule.java:148) 在 org.apache.uima.ruta.rule.RegExpRule.apply(RegExpRule.java:80) 在 org.apache.uima.ruta.RutaScriptBlock.apply(RutaScriptBlock.java:63) 在 org.apache .uima.ruta.RutaModule.apply(RutaModule.java:48) 在 org.apache.uima.ruta.engine.RutaEngine.process(RutaEngine.java:561) ... 17 更多getAllAnnotations(ArtifactAnnotator.java:70) at com.textjuicer.ruta.date.ArtifactAnnotator.main(ArtifactAnnotator.java:38) 原因:java.lang.IllegalArgumentException:无法解析类型:org.apache.uima 处的参考。 ruta.expression.type.SimpleTypeExpression.getType(SimpleTypeExpression.java:48) 在 org.apache.uima.ruta.rule.RegExpRule.getGroup2Types(RegExpRule.java:148) 在 org.apache.uima.ruta.rule.RegExpRule。在 org.apache.uima.ruta.RutaModule.apply (RutaModule.java:48) 在 org.apache.uima.ruta.RutaModule.apply(RutaModule.java:48) 在 org.apache.uima.ruta.RutaScriptBlock.apply(RutaScriptBlock.java:63) .uima.ruta.engine.RutaEngine.process(RutaEngine.java:561) ... 17 更多getAllAnnotations(ArtifactAnnotator.java:70) at com.textjuicer.ruta.date.ArtifactAnnotator.main(ArtifactAnnotator.java:38) 原因:java.lang.IllegalArgumentException:无法解析类型:org.apache.uima 处的参考。 ruta.expression.type.SimpleTypeExpression.getType(SimpleTypeExpression.java:48) 在 org.apache.uima.ruta.rule.RegExpRule.getGroup2Types(RegExpRule.java:148) 在 org.apache.uima.ruta.rule.RegExpRule。在 org.apache.uima.ruta.RutaModule.apply (RutaModule.java:48) 在 org.apache.uima.ruta.RutaModule.apply(RutaModule.java:48) 在 org.apache.uima.ruta.RutaScriptBlock.apply(RutaScriptBlock.java:63) .uima.ruta.engine.RutaEngine.process(RutaEngine.java:561) ... 17 更多无法解析类型:参考 org.apache.uima.ruta.rule.RegExpRule.getGroup2Types(RegExpRule.java:148) 的 org.apache.uima.ruta.expression.type.SimpleTypeExpression.getType(SimpleTypeExpression.java:48) ) 在 org.apache.uima.ruta.RutaScriptBlock.apply(RutaScriptBlock.java:63) 在 org.apache.uima.ruta 的 org.apache.uima.ruta.rule.RegExpRule.apply(RegExpRule.java:80)。 RutaModule.apply(RutaModule.java:48) 在 org.apache.uima.ruta.engine.RutaEngine.process(RutaEngine.java:561) ... 17 更多无法解析类型:参考 org.apache.uima.ruta.rule.RegExpRule.getGroup2Types(RegExpRule.java:148) 的 org.apache.uima.ruta.expression.type.SimpleTypeExpression.getType(SimpleTypeExpression.java:48) ) 在 org.apache.uima.ruta.RutaScriptBlock.apply(RutaScriptBlock.java:63) 在 org.apache.uima.ruta 的 org.apache.uima.ruta.rule.RegExpRule.apply(RegExpRule.java:80)。 RutaModule.apply(RutaModule.java:48) 在 org.apache.uima.ruta.engine.RutaEngine.process(RutaEngine.java:561) ... 17 更多在 org.apache.uima.ruta.RutaModule.apply(RutaModule.java:48) 在 org.apache.uima.ruta.engine.RutaEngine.process(RutaEngine.java:561) 处申请(RutaScriptBlock.java:63) .. . 17 更多在 org.apache.uima.ruta.RutaModule.apply(RutaModule.java:48) 在 org.apache.uima.ruta.engine.RutaEngine.process(RutaEngine.java:561) 处申请(RutaScriptBlock.java:63) .. . 17 更多

4

1 回答 1

2

您可以在 DKPro 管道的末尾添加 Ruta 脚本作为分析引擎。确切的代码主要取决于您如何构建和运行管道。

改编自 uimafit文档

// your collecton reader
CollectionReaderDescription reader = 
  CollectionReaderFactory.createReaderDescription(
    TextReader.class, 
    TextReader.PARAM_INPUT, "/home/uimafit/documents");

// some DKPro Code component
AnalysisEngineDescription dkpro= 
  AnalysisEngineFactory.createEngineDescription(
    Tokenizer.class);

AnalysisEngineDescription ruta = 
  AnalysisEngineFactory.createEngineDescription(
    RutaEngine.class, 
    RutaEngine.PARAM_MAIN_SCRIPT, "Main.ruta");

// some writer
AnalysisEngineDescription writer= 
  AnalysisEngineFactory.createEngineDescription(
    XmiWriter.class, 
    XmiWriter.PARAM_OUTPUT, "/home/uimafit/output");

SimplePipeline.runPipeline(reader, dkpro, ruta, writer);

您可以通过指定 mainScript 参数或直接使用 PARAM_RULES 配置规则来使用 uimaFIT 工厂创建 Ruta 脚本的分析引擎。您还可以使用 Ruta 脚本的 xml 描述符来创建分析引擎。

如果 ruta 脚本声明了新类型,那么要么必须使用 xml 描述符来创建分析引擎,要么需要通过脚本生成的类型系统来扩展 uimaFIT 的 types.txt 文件。(...或者类型系统需要以其他方式包含在内。)

如果ruta脚本导入并调用其他脚本,则需要使用生成的描述符,或者需要正确设置相应的参数,例如additionalScripts。导入的分析引擎也是如此。

如果您在 Ruta 脚本中导入 NLP/DKPro 类型系统,那么您可以使用 DKPro 注释简单地编写规则。

(我是 UIMA Ruta 的开发者)

于 2016-05-24T13:40:06.773 回答