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)};
Подскажите, пожалуйста, как мне этого добиться или есть ли обходной путь?