Проверьте буквенно-цифровой номер определенного размера UIMA RUTA - PullRequest
0 голосов
/ 07 сентября 2018

Я новичок в UIMA RUTA. Я пытаюсь реализовать основную задачу, которая должна соответствовать буквенно-цифровым символам определенного размера. Например: 123Abcd

Я попробовал следующий код:

DECLARE VarA;
ANY{REGEXP("([A-Za-z0-9]{7})")->MARK(VarA)};

Это не работает, как ожидалось. Пожалуйста, дайте мне знать, что я делаю неправильно. Тот же REGEX работает в другом движке REGEX, кроме RUTA.

Заранее спасибо.

1 Ответ

0 голосов
/ 07 сентября 2018

Это потому, что Рута разделил документ на маленькие фрагменты / токены / основные аннотации (см. this ). Реализация сеялки по умолчанию разделяет слова, если они представляют собой комбинацию числа и символов. Реализация сеялки по умолчанию может быть изменена вашей собственной сеялкой с другим поведением.

Ваш пример "123Abcd" будет проанализирован для следующих токенов (не все уровни в списке - для получения дополнительной информации см. Ссылку):

Document -> Complete document "123Abcd"
NUM -> 123
CW -> Abcd

Другим примером ввода "45 abcd 5" становится:

Document -> Complete document "45 abcd 5"
NUM -> 45
SPACE -> The spacer between 45 and abcd // Not visible by default
SW -> abcd
SPACE -> The spacer between abcd and 5 // Not visible by default
NUM -> 5

В вашем примере вы пытаетесь сопоставить регулярное выражение токенам Any. Документ содержит 2 любых токена (NUM и CW), и потому что шаблон не совпадает (это не 1 токен, а разделен)

Вы можете сделать что-то вроде следующего примера, чтобы получить правильные результаты:

DECLARE VarA, VarB, VarC, VarD;

// Option 1 (execute regex on the complete input document
// I think this is not a good solution because this can be slow
Document{REGEXP("([A-Za-z0-9]{7})") -> MARK(VarA)};

// Option 2 (match with regex on each annotation type)
(NUM{REGEXP("[0-9]{3}")} CW{REGEXP("[a-zA-Z]{4}")}){ -> MARK(VarB)};

// Option 3 (first match a pattern of annotations and then match the 
// regex on the complete pattern)
(NUM CW){REGEXP("([A-Za-z0-9]{7})") -> MARK(VarC)};

// Option 4 (only check if its a "number + capital word")
(NUM CW){ -> MARK(VarD)};
...