UIMA RUTA: регулярное выражение в WORDLIST

Есть ли способ иметь регулярные выражения в WORDLIST? Мне нужно реализовать то же, что указано в https://issues.apache.org/jira/browse/UIMA-3382.

Или есть какой-нибудь альтернативный способ решить это?

РЕДАКТИРОВАТЬ: WORDLIST определяется как список текстовых элементов. Что делать, если у меня есть список регулярных выражений, которые я хочу пометить как один и тот же тип. Есть ли способ сделать это?

Например, я хочу найти дату в документе, но есть ряд форматов даты, поэтому регулярные выражения - более краткий способ охватить все возможные случаи. Поэтому я пытался использовать синтаксис ниже, но единственные совпадения были для тех случаев, когда было одно слово без специального синтаксиса регулярных выражений.

DECLARE Date;
WORDLIST DateFormatList='DateFormat.regex';
Document{-> MARKFAST(Date, DateFormat, true,1)};

Что я могу изменить в правилах, чтобы элементы в DateFormatList обрабатывались как регулярные выражения?

Спасибо

2 ответа

Регулярные выражения в списках слов не будут поддерживаться в ближайшем будущем, если это не выполнит волонтер. Проблема состоит в том, что списки слов используют процесс поиска, а не FST, что делает желаемую функциональность не простой для реализации.

В некоторых редких ситуациях можно смоделировать желаемую функциональность с помощью списков слов, например, для необязательных последовательностей.

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

ANY{INLIST(MonthsList) -> MARK(Month), MARK(Date,1,3)} 
PERIOD? NUM{REGEXP(".{2,4}") -> MARK(Year)};

Если вы хотите придерживаться регулярных выражений, то вы можете использовать список простых правил регулярных выражений:

"regexp1" -> Date;
"regexp2" -> Date;
"regexp3" -> Date;

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

(Я разработчик UIMA Рута)

Я реализовал его на основе выражений, о которых вы упоминали в ответе выше, и он работает нормально. Но есть еще один сценарий, который полностью основан на регулярном выражении в файле. т.е. пользователь поместит регулярное выражение и тип аннотации в этот файл.

WORDTABLE regexTable = 'regexTable.csv';

// Не уверен, какой будет синтаксис / реализация, но нужно сделать что-то вроде
regexTable.column1 {-> MARK(значение), CREATE(Данные, "значение" = значение, "тип" = regexTable.column2)};

Подскажите, пожалуйста, как мне этого добиться или есть ли обходной путь?

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