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

Другие вопросы по тегам