Зависимости аннотатора: возможности типа UIMA?
В моем приложении UIMA у меня есть несколько аннотаторов, которые должны запускаться после запуска определенного аннотатора.
Сначала я думал об объединении этих аннотаторов вместе, но у меня есть другие аннотаторы, которые также зависят от этого (и другого) аннотатора, что делает агрегацию сложной и / или непрактичной.
Я читал о возможностях типов, которые, если я правильно понял, говорят UIMA, что определенные типы (аннотации) должны присутствовать при использовании в качестве Input Type
, Я надеялся, что UIMA выдаст мне что-то вроде предупреждения при запуске конвейеров без аннотаторов, которые имеют некоторые типы вывода, которые объявлены как типы ввода используемого аннотатора. Вместо этого, аннотаторы продолжают работать / обрабатываться как обычно.
Есть ли способ добиться того, чего я хочу, или это просто не нужно? В настоящее время я использую SimplePipeline, если это имеет значение.
TL; DR: Моя цель состоит в том, чтобы аннотаторы отказывались работать, если в конвейере отсутствуют некоторые другие аннотаторы / запланированные после этих аннотаторов
Заранее спасибо.
3 ответа
В UIMA основной способ гарантировать, что необходимые аннотации присутствуют для вашего аннотатора, - объединять аннотаторы вместе. Таким образом, чтобы ответить на ваш вопрос, именно так вы добьетесь того, чего хотите, потому что то, что вы хотите сделать (пусть UIMA определит все ваши зависимости с помощью возможностей типа и предоставит предупреждения), невозможно или практично с набором автономных аннотаторов.,
Мой вопрос к вам: почему так сложно вычислить наши зависимости, создавая совокупные аннотаторы? Вы понимаете, что можете агрегировать агрегатные конвейеры? Они должны иметь все свои аннотационные зависимости, если они функционируют правильно, и предоставить список того, что они выводят, чтобы вы могли использовать их в качестве входных данных для построения собственного конвейера.
UIMA - это очень гибкая структура. По умолчанию возможности не используются и, если они имеются, носят чисто информационный характер. Однако проверьте, например, CapabilityLanguageFlowController:
FlowController for the CapabilityLanguageFlow, which uses a linear flow
but may skip some of the AEs in the flow if they do not handle the language
of the current document or if their outputs have already been produced by
a previous AE in the flow.
Вы можете настроить агрегат на использование такого контроллера потока, и тогда вы сможете воспользоваться возможностями.
Раскрытие информации: я работаю над проектом Apache UIMA (но я пока не использовал CapabilityLanguageFlowController)
UIMA не обязывает присутствовать определенные типы (аннотации). Это функция, которая позволяет гибкость.
Однако вы можете задокументировать свой аннотатор UIMAfit с аннотацией @TypeCapability. Типичное использование этой аннотации может выглядеть примерно так:
@TypeCapability(
inputs="org.apache.uima.fit.type.Token",
outputs="org.apache.uima.fit.type.Token:pos")
Тем не менее, это не обеспечивает зависимости типа. В одном проекте я реализовал собственную систему проверки поверх UIMA.