如何将自定义条件添加到现有的RUTA项目?开始了,但我卡住了

StackOverflow https://stackoverflow.com//questions/22056617

  •  22-12-2019
  •  | 
  •  

我想添加一个自定义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工作台中解析的新条件:

  1. 条件的实现,就像你在你的问题中所做的那样
  2. IRutaConditionExtension的实现,它向引擎提供条件实现
  3. IIDEConditionExtension的一个实现,它为UIMA Ruta工作提供了条件。

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

有一个示例性项目,它提供了所有可能的语言元素的实现。这个项目包含分析引擎的实现和UIMA Ruta工作台的实现,因此是一个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工作台或只想在UIMA管道中应用规则,则只需 ExampleConditionExampleConditionExtension, ,你需要添加 org.apache.uima.ruta.example.extensions.ExampleConditionExtensionadditionalExtensions 您的UIMA Ruta分析引擎的参数(描述符)。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top