2016-09-30 3 views
1

Я обрабатываю текст с UIMA Ruta и хочу удалить дублированные аннотации. Я рассматриваю аннотацию для дублирования, если определенные функции, например имя, имеют одинаковое значение. Я безуспешно пробовал разные подходы, но я надеюсь, что следующие примеры дают представление о том, что я пытаюсь сделать:Как сравнить особенности двух разных аннотаций в правиле Руты?

STRING nameVal; 
Person {-> GETFEATURE("name", nameVal)} 
ANY+? 
Person.name == nameVal {-> UNMARK(Person)}; 

Я также попробовал этот вариант:

STRING nameVal; 
Person {-> GETFEATURE("name", nameVal)} 
ANY+? 
Person {-> UNMARK(Person)} <- { Person.name == nameVal; }; 

Если я заменить переменная nameVal с литералом (см. следующий пример), правила работают хорошо и, кажется, близки к тому, что я хочу, но не совсем.

Person 
ANY+? 
Person.name == "Mustermann" {-> UNMARK(Person)}; 

Я считаю, проблема заключается в том, что при сопоставлении сравнения глобальная переменная еще не была инициализирована. Есть ли способ в Руте сравнить особенность первой согласованной аннотации с особенностью последней согласованной аннотации внутри того же правила?

ответ

0

Да, проблема в том, что действия выполняются, когда полное правило согласовывается после оценки всех условий. Вам нужно действие, чтобы присвоить значение функции переменной, но вам нужно условие для сравнения переменной с другой функцией.

Однако есть много способов решить эту проблему в Руте, тем не менее, например, с более строгими правилами, BLOCK или действующими правилами. Лучший способ - выражение метки. UIMA Ruta 2.5.0 делает нашу жизнь намного проще. Вы можете написать что-то вроде этого:

p1:Person # p2:Person{p1.name == p2.name -> UNMARK(Person)}; 

или

p1:Person # Person.name==p1.name{ -> UNMARK(Person)}; 

Вы, вероятно, можно написать быстрее правило, если вы используете StringList: Если значение содержится в списке, а затем снимите флажок аннотацию, если а затем добавьте значение в список.

ОТКАЗ: Я разработчик UIMA Ruta

+0

Спасибо за ваш быстрый ответ. Собственно, я тоже это пробовал. Работает ли он только в UIMA Ruta 2.5.0 (еще не обновлен)? При использовании Ruta, встроенного в AE, требуется ли какая-то конфигурация? Я проверю это завтра на работе. – Santam

+0

Да, он работает только в UIMA Ruta 2.5.0, который поддерживает функции epxressions на выражения меток типа 'p1.name'. –

+0

Я провел некоторое тестирование сейчас, и, к сожалению, это не сработало. После обновления плагинов eclipse я получаю «IllegalArgumentException» с сообщением «Пропущенные аргументы недействительны!» при запуске Ruta в тестовом проекте с использованием инструмента Ruta Workbench. В проекте, в котором запущен Ruta egine, набор правил, который хорошо работает под Ruta 2.4.0, генерирует «RutaParseRuntimeException» под Ruta 2.5.0. Я использую Eclipse Mars.2 Release (4.5.2), Ruta Workbench 2.5.0 и UIMA Tools и runtime 2.9.0. Есть ли какие-то проблемы, о которых я должен знать? – Santam

 Смежные вопросы

  • Нет связанных вопросов^_^