如何创建 java nlp 和 ruta 脚本的管道?

How to create pipeline of java nlp and ruta scripts?

我正在开发一个 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) 在 org.apache.uima.analysis_engine.impl.PrimitiveAnalysisEngine_impl.processAndOutputNewCASes(PrimitiveAnalysisEngine_impl.java:298) 在 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.analysis_engine.impl.AnalysisEngineImplBase.process(AnalysisEngineImplBase.java:267) 在 org.apache.uima.fit.pipeline.SimplePipeline.runPipeline(SimplePipeline.java:170) 在 org.apache.uima.fit.pipeline.SimplePipeline.runPipeline(SimplePipeline.java:191) 在 com.textjuicer.ruta.date.ArtifactAnnotator.runNLP(ArtifactAnnotator.java:225) 在 com.textjuicer.ruta.date.ArtifactAnnotator.getAllAnnotations(ArtifactAnnotator.java:70) 在 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.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 个

线程中出现异常 "main" 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) 在 org.apache.uima.analysis_engine.impl.PrimitiveAnalysisEngine_impl.processAndOutputNewCASes(PrimitiveAnalysisEngine_impl.java:298) 在 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.analysis_engine.impl.AnalysisEngineImplBase.process(AnalysisEngineImplBase.java:267) 在 org.apache.uima.fit.pipeline.SimplePipeline.runPipeline(SimplePipeline.java:170) 在 org.apache.uima.fit.pipeline.SimplePipeline.runPipeline(SimplePipeline.java:191) 在 com.textjuicer.ruta.date.ArtifactAnnotator.runNLP(ArtifactAnnotator.java:225) 在 com.textjuicer.ruta.date.ArtifactAnnotator.getAllAnnotations(ArtifactAnnotator.java:70) 在 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.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 个

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

改编自 uimafit documentation:

// 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的开发者)