2016-11-09 3 views
1

Я хочу сопоставить некоторые термины только в том случае, если термин, относящийся к этому термину, имеет значение для меня. Таким образом, я создал минимальный пример:UIMA Ruta: Необязательный квантор

Это мой Тестовые данные:

small Large 
Large 
small 

И я хочу отметить термины маленький Большой и Большие, но не «маленькие».

Так что я подумал, что-то, как это должно работать:

DECLARE Test; 
(SW*? CW) {-> CREATE(Test)}; 

Но РУТА соответствует только «маленький Большой».

Для тестирования Я заменил «SW» на «W», и он сделает то, что я не хочу.

ответ

0

К сожалению, необязательные квантификаторы в начале правила не являются необязательными, если правило начинает соответствовать первому элементу правила. Это означает, что вам либо нужны два правила, либо вам нужно изменить порядок соответствия элемента правила.

Изменение порядка соответствия элемента правила приводит к совпадению различных правил, так как не все инкрементные последовательности SW s рассматриваются до CW. Тем не менее, это то, что обычно предпочитают в любом случае. Правило будет выглядеть следующим образом:

(SW* @CW) {-> CREATE(Test)}; 

два правила подход будет выглядеть примерно так:

(SW+? CW) {-> CREATE(Test)}; 
CW {-> CREATE(Test)}; 

Я рекомендую избегать использования неохотной квантора, если он на самом деле не требуется из-за дополнительных вычислений, которые являются не обязательно. Скорее используйте условие PARTOF, даже если оно выглядит не так хорошо.

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