如何创建 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的开发者)
我正在开发一个 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的开发者)