Эта тривиальная задача может быть довольно сложной, в основном из-за настроек видимости.Я не знаю, почему ваши правила в этом вопросе не работают, не глядя на текст, который должен быть обработан.
Что касается UIMA Ruta 2.7.0, я предпочитаю правило вроде:
# Token{->First};
Вот некоторые дополнительные мысли о правилах в вопросе:
Token.begin == 0;
Обычно токен не начинается с 0, поскольку документ начинается с пробелов или разрывов строк.Если на самом деле есть токен, который начинается со смещения 0 и правило не совпадает, то что-то невидимое покрывает начало конца токена.Это, конечно, зависит от настроек фильтрации, но в случае, если вы их не изменили, это может быть bom.
Token{STARTSWITH(DocumentMetaData)};
Здесь либо применима вышеуказанная проблема, либо смещение начала не идентично.Если DocumentMetaData покрывает весь документ, я бы сделал ставку на первые пробелы.Другая причина может заключаться в том, что внутренняя индексация нарушена, например, токены или DocumentMetaData создаются внешним механизмом анализа, который был вызван с помощью EXEC
, и в действии не было настроено переиндексация.Эта ситуация также может возникнуть при неудачной оптимизации с использованием параметров конфигурации.
Document{->MARKFIRST(First)};
First{->MARK(FirstAgain)};
MARKFIRST создает аннотацию, используя смещение первого RutaBasic в согласованном контексте IIRC.Если документ начинается с чего-то невидимого, например с разрыва строки, второе правило не может совпадать.
В качестве общего совета в таких ситуациях, когда некоторые очевидные простые правила не работают должным образом, я рекомендую добавитьнекоторые дополнительные правила и использование конфигурации отладки с представлением объяснения.Как правило, Token;
может непосредственно выделяться, если настройка видимости проблематична для данных токенов.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я являюсь разработчиком UIMA Ruta