UIMA Ruta: необязательный квантификатор
Я хочу соответствовать некоторым условиям, только если термин, стоящий за этим термином, важен для меня. Итак, я создал минимальный пример:
Это мои данные испытаний:
small Large
Large
small
И я хочу отметить термины " маленький" и " большой", но не "маленький".
Поэтому я подумал, что-то вроде этого должно работать:
DECLARE Test;
(SW*? CW) {-> CREATE(Test)};
Но РУТА только соответствует "Малой Большой".
Для тестирования я заменил "SW" на "W", и он будет делать то, что я не хочу.
1 ответ
К сожалению, необязательные квантификаторы в начале правила не являются обязательными, если правило начинает совпадать с первым элементом правила. Это означает, что вам нужно либо два правила, либо вам нужно изменить порядок соответствия элементов правила.
Изменение порядка совпадения элементов правила приводит к различным совпадениям правил, поскольку не все последовательные последовательности SW
считаются до CW
, Тем не менее, это то, что обычно предпочитают в любом случае. Правило будет выглядеть так:
(SW* @CW) {-> CREATE(Test)};
Подход с двумя правилами будет выглядеть примерно так:
(SW+? CW) {-> CREATE(Test)};
CW {-> CREATE(Test)};
Я рекомендую избегать использования неохотного квантификатора, если он действительно не требуется из-за дополнительных вычислений, которые не нужны. Скорее используйте условие PARTOF, даже если оно выглядит не так хорошо.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я разработчик UIMA Ruta