Как сопоставить необязательный номер с буквенно-цифровым в скрипте рута - PullRequest
0 голосов
/ 26 марта 2019

Я работаю над извлечением объекта в Пеге. У меня есть требование, чтобы соответствовать номеру полиса, который состоит из 3 частей:

1) При желании 1 будет первым символом в политике. Это необязательно

2) буквенно-цифровой код длины 2, за которым следует произвольно дефис или пробел

3) буквенно-цифровой длины 3

Итак, некоторые примеры форматов:

AB-CDE, AB CDE, ABCDE, 1AB-CDE

23-456, 23 456, 23456, 123456

AB-2B4, AB-B2C, A1-2B4, 2A-34B, 12A-34B, 123-45C и т. Д.

Я сталкиваюсь с проблемой, когда номер политики начинается с 2 или 3 цифр или у него нет пробела или дефиса.

Например, 12А-34В, 123-45С, 23456, 123456.

Я написал ниже скрипт:

PACKAGE uima.ruta.example;
Document{-> RETAINTYPE(SPACE)};


("1")+? ((NUM* W*)|(W* NUM*)){REGEXP(".{2}")} ("-"|SPACE)? ((NUM* W* NUM*)|(W* NUM* W*)){REGEXP(".{3}")->MARK(EntityType,1,4)};

((NUM* W*)|(W* NUM*)){REGEXP(".{2}")} ("-"|SPACE)? ((NUM* W* NUM*)|(W* NUM* W*)){REGEXP(".{3}")->MARK(EntityType,1,3)};

Этот код отлично работает для шаблонов с пробелом, например: AB-CDE, AB CDE, 1AB-CDE. Но не работает, если нет пробела и дефис или шаблон начинаются с 2 или 3 цифр.

Пожалуйста, помогите написать правильный шаблон. Заранее спасибо.

1 Ответ

0 голосов
/ 01 апреля 2019

Аннотация семян UIMA Ruta NUM охватывает все число.Поэтому примеры типа 23456, 123456 не могут быть разделены на поданнотации с помощью Ruta.

Решением было бы использование чистого регулярного выражения для аннотирования всех упомянутых примеров:

"\\w{2,3}[\\-|\\s]?\\w{2,3}" -> EntityType;
...