2

我想添加一个自定义 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;
}
}

该文件编译到 target/classes/... 文件夹,但是当我创建一个 RUTA 脚本时:

DECLARE Test;
SW{MyNewCondition("foo") -> MARK(Test)};

... Eclipse 告诉我“MyNewCondition”没有定义,当我运行它时,我得到:“第 40 行错误,”(“:在控制台上找不到可行的替代方案”。我想我需要做一些进一步的导入,但不知道怎么做。我尝试从 Github 存储库中的 Extension 示例项目开始工作,但我不知道从哪里开始,因为脚本文件不包含任何进一步的导入,但相关的 xml 描述符文件包含。但是作为这些是自动生成的,我不知道这是我应该改变的还是其他的。

我还尝试通过 Eclipse 的构建路径选项从第二个项目导入相同的新条件类型,但也没有运气。

有人可以帮忙吗?谢谢。

4

1 回答 1

2

您至少需要三个类来添加在 UIMA Ruta Workbench 中也已解决的新条件:

  1. 如您在问题中所做的那样执行条件
  2. IRutaConditionExtension 的实现,它为引擎提供条件实现
  3. IIDEConditionExtension 的实现,它为 UIMA Ruta Workench 提供条件

条件本身仅包含应添加到语言中的功能。分析引擎当然对任何外部实现一无所知,从而导致奇怪的解析异常,例如“(”未找到。有时应该改进。分析引擎提供了一个配置参数additionalExtensions列出了该语言的所有已知扩展。如果您不使用 UIMA Ruta Workbench,则需要将 IRutaConditionExtension 的实现添加到此参数。IIDEConditionExtension 的实现为 UIMA Ruta Workbench 提供了必要的功能,即语法检查、语法突出显示等。此外,它使工作台能够生成正确的描述符。它将您的 IRutaConditionExtension 实现添加到相应的参数中。Workbench 的这个扩展当然需要在安装在 UIMA Ruta Workbench Eclipse 实例中的 Eclipse 插件中实现,以便在 Workbench 中可用。有一个扩展点,您需要扩展它知道您的 IRutaConditionExtension 和 IIDEConditionExtension 的实现。

有一个示例项目提供了所有可能的语言元素的实现。该项目包含分析引擎的实现以及 UIMA Ruta Workbench 的实现,因此是一个 Eclipse 插件(请注意 pom 文件)。

关于 ExampleCondition 条件扩展,有三个重要的点/类:

  1. ExampleCondition.java提供新条件的实现,它评估日期
  2. ExampleConditionExtension.java提供分析引擎的扩展。它知道条件的名称及其实现,可以创建该条件的新实例,并且能够为解释组件描述条件。
  3. ExampleConditionIDEExtension提供编辑器的语法检查和语法着色的关键字。
  4. 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 Workbench 或只想在 UIMA 管道中应用规则,您只需要ExampleConditionExampleConditionExtension,并且您需要添加org.apache.uima.ruta.example.extensions.ExampleConditionExtensionadditionalExtensions您的 UIMA Ruta 分析引擎(描述符)的参数中。

在同一工作空间中使用 Java 项目添加新条件尚未经过测试,但由于包含使用 Eclipse 的扩展点机制的扩展,至少会缺少 Workbench 支持。

于 2014-02-27T11:35:47.013 回答