题
我想添加一个自定义UIMA RUTA规则条件。我在Eclipse中有一个现有的UIMA Ruta项目。到目前为止,我用一个基本的注释器存根在同一个项目中创建了一个源文件:
package mynamespace.extensions;
[imports]
public class MyNewCondition extends AbstractRutaCondition {
private final String para1;
public MyNewCondition(String para1) {
super();
this.para1 = para1;
}
@Override
public EvaluatedCondition eval(AnnotationFS annotation,
RuleElement element, RutaStream stream, InferenceCrowd crowd) {
// TODO Auto-generated method stub
if (para1 == "hfoo")
return new EvaluatedCondition(this, true);
else
return new EvaluatedCondition(this, false);
}
public String getPara() {
return para1;
}
}
该文件编译到目标/classes/。..文件夹,但是当我创建一个RUTA脚本:
DECLARE Test;
SW{MyNewCondition("foo") -> MARK(Test)};
...Eclipse告诉我"MyNewCondition"未定义,当我运行它时,我得到:"第40行的错误,"(":在控制台上找不到可行的替代方案。我想我需要做一些进一步的导入,但不知道如何。我试图从Github存储库中的扩展示例项目工作,但我不知道从哪里开始,因为脚本文件不包含任何进一步的导入,但关联的xml描述符文件确实如此。但是当这些自动生成时,我不知道这是我应该改变的还是其他的东西。
我也尝试通过Eclipse的构建路径选项从第二个项目导入相同的新条件类型,但也没有运气。
有人能帮忙吗?谢谢.
解决方案
您至少需要三个类来添加一个也在UIMA Ruta工作台中解析的新条件:
- 条件的实现,就像你在你的问题中所做的那样
- IRutaConditionExtension的实现,它向引擎提供条件实现
- IIDEConditionExtension的一个实现,它为UIMA Ruta工作提供了条件。
条件本身只包含应添加到语言中的功能。分析引擎当然不知道任何外部实现导致奇怪的解析异常,如"("未找到。这有时应该改进。分析引擎提供配置参数 additionalExtensions
它列出了该语言的所有已知扩展名。如果您没有使用UIMA Ruta工作台,则需要将IRutaConditionExtension的实现添加到此参数中。IIDEConditionExtension的实现为UIMA Ruta工作台提供了必要的功能,即语法检查、语法突出显示等。此外,它使工作台能够生成正确的描述符。它将IRutaConditionExtension的实现添加到相应的参数中。工作台的此扩展当然需要在安装在UIMA Ruta Workbench Eclipse实例中的Eclipse插件中实现,以便在工作台中可用。有一个扩展点,您需要扩展它,它知道您的IRutaConditionExtension和IIDEConditionExtension的实现。
有一个示例性项目,它提供了所有可能的语言元素的实现。这个项目包含分析引擎的实现和UIMA Ruta工作台的实现,因此是一个Eclipse插件(注意pom文件)。
关于ExampleCondition条件扩展,有三个重要的点/类:
ExampleCondition.java
提供计算日期的新条件的实现ExampleConditionExtension.java
为分析引擎提供扩展。它知道条件的名称,它的实现,可以创建该条件的新实例,并且能够为解释组件说出条件。ExampleConditionIDEExtension
提供编辑器的语法检查和语法着色的关键字。plugin.xml
定义工作台的扩展:<extension point="org.apache.uima.ruta.ide.conditionExtension"> <condition class="org.apache.uima.ruta.example.extensions.ExampleConditionIDEExtension" engine="org.apache.uima.ruta.example.extensions.ExampleConditionExtension"> </condition> </extension>
如果您不使用UIMA Ruta工作台或只想在UIMA管道中应用规则,则只需 ExampleCondition
和 ExampleConditionExtension
, ,你需要添加 org.apache.uima.ruta.example.extensions.ExampleConditionExtension
向 additionalExtensions
您的UIMA Ruta分析引擎的参数(描述符)。
在同一工作区中使用Java项目添加新条件尚未测试,但由于包含使用Eclipse的扩展点机制的扩展,至少会缺少工作台支持。