Как я могу добавить пользовательское условие в существующий проект RUTA?Начал, но застрял
Вопрос
Я хочу добавить пользовательское условие правила 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:
- Реализация условия, как вы сделали в своем вопросе
- Реализация IRutaConditionExtension, которая обеспечивает реализацию условия для движка
- Реализация 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, то есть три важных места / класса:
ExampleCondition.java
обеспечивает реализацию нового условия, которое оценивает датыExampleConditionExtension.java
предоставляет расширение для механизма анализа.Он знает имя условия, его реализацию, может создавать новые экземпляры этого условия и способен вербализовать условие для компонентов объяснения.ExampleConditionIDEExtension
предоставляет проверку синтаксиса для редактора и ключевое слово для раскраски синтаксиса.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.