Как я могу добавить пользовательское условие в существующий проект RUTA?Начал, но застрял

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

  •  22-12-2019
  •  | 
  •  

Вопрос

Я хочу добавить пользовательское условие правила UIMA RUTA.У меня есть существующий проект UIMA Ruta в Eclipse.До сих пор я создавал исходный файл в том же проекте с заглушкой базового аннотатора:

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",(":не найдено жизнеспособной альтернативы" на консоли.Я предполагаю, что мне нужно выполнить какой-то дальнейший импорт, но не знаю как.Я попытался работать с проектом Extension example в репозитории Github, но я не знаю, с чего начать, поскольку файл сценария не содержит никаких дополнительных импортируемых файлов, но связанные файлы xml-дескрипторов содержат.Но поскольку они генерируются автоматически, я не знаю, следует ли мне это изменить или это что-то другое.

Я также попытался импортировать тот же новый тип условия из второго проекта с помощью параметров пути сборки Eclipse, но и там не повезло.

Кто-нибудь может помочь?Спасибо.

Это было полезно?

Решение

Вам нужно как минимум три класса для добавления нового условия, которое также разрешается в рабочей среде UIMA Ruta:

  1. Реализация условия, как вы сделали в своем вопросе
  2. Реализация IRutaConditionExtension, которая обеспечивает реализацию условия для движка
  3. Реализация IIDEConditionExtension, которая обеспечивает условие для рабочей среды UIMA Ruta

Само условие содержит только ту функциональность, которая должна быть добавлена в язык.Механизм анализа, конечно, ничего не знает о каких-либо внешних реализациях, что приводит к странному исключению синтаксического анализа типа "(" не найдено.Иногда это следует улучшать.Механизм анализа предоставляет параметр конфигурации additionalExtensions в нем перечислены все известные расширения языка.Если вы не используете UIMA Ruta Workbench, вам необходимо добавить вашу реализацию IRutaConditionExtension к этому параметру.Реализация IIDEConditionExtension предоставляет необходимую функциональность для рабочей среды UIMA Ruta, которая заключается в проверке синтаксиса, подсветке синтаксиса и так далее.Кроме того, это позволяет Workbench генерировать правильные дескрипторы.Он добавляет вашу реализацию IRutaConditionExtension к соответствующему параметру.Это расширение Workbench, конечно, должно быть реализовано в плагине Eclipse, который установлен в вашем экземпляре Eclipse для UIMA Ruta Workbench, чтобы быть доступным в Workbench.Существует точка расширения, которую вам нужно расширить, которая знает как вашу реализацию IRutaConditionExtension, так и IIDEConditionExtension.

Существует примерный проект, который обеспечивает реализацию всех возможных языковых элементов.Этот проект содержит реализации для механизма анализа, а также реализацию для рабочей среды UIMA Ruta и, следовательно, является плагином Eclipse (обратите внимание на файл pom).

Что касается расширения условия ExampleCondition, то есть три важных места / класса:

  1. ExampleCondition.java обеспечивает реализацию нового условия, которое оценивает даты
  2. ExampleConditionExtension.java предоставляет расширение для механизма анализа.Он знает имя условия, его реализацию, может создавать новые экземпляры этого условия и способен вербализовать условие для компонентов объяснения.
  3. ExampleConditionIDEExtension предоставляет проверку синтаксиса для редактора и ключевое слово для раскраски синтаксиса.
  4. plugin.xml определяет расширение для Workbench:

    <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, вам нужно только ExampleCondition и ExampleConditionExtension, и вам нужно добавить org.apache.uima.ruta.example.extensions.ExampleConditionExtension к тому additionalExtensions параметр вашего механизма анализа UIMA Ruta (дескриптор).

Добавление новых условий с использованием Java-проектов в том же рабочем пространстве еще не тестировалось, но, по крайней мере, поддержка Workbench будет отсутствовать из-за включения расширений, использующих механизм точки расширения Eclipse.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top