У меня есть простой вопрос Руты.
В примере, взятом из tools.ruta.book.pdf
Параграф {IF (keywordAmount> 5) → MARK (KeywordParagraph)};
возможно ли вместо выполнения только одного оператора выполнить либо блок, который был определен ранее, либо функцию?
UIMA Ruta предлагает различные действия для различных задач. Действия CALL и EXEC могут применять сценарии, блоки и механизмы анализа.
Действие CALL обычно используется, когда дополнительные правила должны применяться в случае соответствия правила. Аргумент действия указывает либо на дополнительный файл сценария, либо на файл сценария (который может быть одним и тем же), за которым следуют имена блоков (с точками). Поэтому вы можете определить разные блоки во внешнем файле сценария, которые вызываются отдельно основным файлом сценария. В примерах в документации упоминается в большинстве случаев что-то вроде Document{->CALL(AnotherScript)};
, но это тоже нормальное правило. Действие может использоваться в любых правилах в элементах правил с любыми условиями.
Например, вы упомянули в своем вопросе, может быть, вам что-то вроде следующего интересно:
Параграф {IF (kewordAmount> 5) → CALL (MyScript.BlockX))};
Имейте в виду, что BlockX выполняется для каждого соответствия элемента правила (для каждого абзаца, который выполняет условие), и только в контексте согласованного диапазона элемента правила (только в этих абзацах).
Действие EXEC обычно используется при применении дополнительного механизма анализа, поскольку действие CALL разумно для настроек фильтрации.
Если необходимо выполнить дополнительные функции в случае соответствия правила, то может быть добавлено дополнительное действие на язык, обеспечивающий функциональность, или механизм внешнего анализа, который решает задачу.