UIMA Ruta Только комментирует самый длинный матч
Я использую RUTA и написал много разных правил для извлечения одной и той же сущности. Например, я буду добывать "фабрику туалетной бумаги". На данный момент мои правила приведут к фабрике туалетной бумаги, бумажной фабрике и фабрике. Но меня интересует только самый длинный матч.
Я создал минимальный пример:
DECLARE Test;
(CW CW) {-> CREATE(Test)};
(CW CW CW) {-> CREATE(Test)};
И моя тестовая строка:
lower lower Upper Upper Upper lower Upper
Вышеуказанные правила будут соответствовать Upper Upper и Upper Upper Upper. Но в этом случае меня интересует только результат последнего правила.
Можно ли удалить более короткие спички?
1 ответ
Есть несколько вариантов, чтобы избежать дополнительных совпадений и удалить дополнительно созданные аннотации.
Вы можете удалить дополнительные аннотации что-то вроде:
Test->{ANY t:@Test{-> UNMARK(t)};t:@Test{-> UNMARK(t)} ANY;};
Это правило проверяет все тестовые аннотации и применяет два правила в этом диапазоне. Каждое правило ищет Test
аннотации предшествует или сопровождается чем-либо, что означает, что этот меньше, чем первый. Если совпадает, аннотация удаляется.
Существует также условие PARTOFNEQ, но оно довольно медленное:
Test{PARTOFNEQ(Test)->UNMARK(Test)};
Если вы хотите избежать создания аннотаций, вам нужно изменить порядок правил и сначала применить более конкретный. Вы можете изменить процесс сопоставления разными способами, например, с помощью условия PARTOF, действия MARKONCE или установки GREEDYANCHORING.
Пример:
(CW{-PARTOF(Test)} CW CW) {-> CREATE(Test)};
(CW{-PARTOF(Test)} CW) {-> CREATE(Test)};
В вашем примере вы можете, конечно, сделать что-то вроде:
CW[2,3]{-PARTOF(Test)-> Test};
но это, вероятно, не идея этого вопроса.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я разработчик UIMA Ruta