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

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