Все о нем определение lexer, которое создает аннотации класса маркера руты (W, CW, SPECIAL ...).
Правило CW COLON CW+{->MARK(CITY,1,1)};
создает аннотацию типа CITY
для интервала текста Paris
независимо от символа юникода.
Последнее правило элемент CW+
матчи на Ã
, так как это аннотированный с CW, но там останавливается, так как ‰
не CW, но SPECIAL.
Существуют различные способы избежать этой проблемы. Мой совет будет заключаться в том, что вы должны полагаться на разные типы аннотаций для своих правил. Работа аннотаций lexer в руте заключается в создании минимальных аннотаций. Они вообще не определяют токенов.
Вы могли бы, возможно, использовать что-то вроде этого (или использовать фактическую Tokenizer для лучшей производительности):
DECLARE CITY;
DECLARE Token;
RETAINTYPE(SPACE);
(W (SPECIAL? W)*){-> Token};
RETAINTYPE;
Token COLON Token+{->MARK(CITY,1,1)};
ОТКАЗ: Я разработчик UIMA Ruta
Я сталкивался с подобной проблемой для EN DASH (юникод = â € "). Я использовал SW SPECIAL + {-> MARK (HYPHEN_UNICODE, 1,2)}; Так что проблема решена. Это единственный способ решить проблему. Orelse есть другое решение. –