在我的UIMA应用程序中,我有一些注释器必须在某个注释器运行后运行。
起初,我考虑过将这些注释器聚合在一起,但我还有其他注释器也依赖于这个(和其他)注释器,这会使聚合变得困难和/或不实用。
我读到了类型功能,如果我理解正确的话,告诉UIMA在用作Input Type
时必须存在某些类型(注释)。我希望UIMA在运行没有Annotators的管道时给我一些警告,这些Annotators有一些输出类型被声明为使用的Annotator的输入类型。
相反,注释器像往常一样继续运行/处理。
有没有办法实现我想要的,或者这只是不必要的? 如果重要的话,我目前正在使用SimplePipeline。
TL; DR:我的目标是,如果管道中缺少某些其他注释器/在这些注释器之后安排注释器,则注释器拒绝运行
提前致谢。
答案 0 :(得分:2)
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)
答案 1 :(得分:1)
在UIMA中,确保注释器需要注释的主要方法是将注释器聚合在一起。所以要回答你的问题,那就是你要实现你想要的东西,因为你想要做什么(让UIMA通过类型功能来表示我们所有的依赖关系并提供警告)对于一组独立的注释器既不可行也不实用
我的问题是,为什么通过制作聚合注释器来确定我们的依赖关系是如此困难?您是否意识到您可以汇总聚合管道?如果它们正常运行,它们应该具有完整的所有注释依赖性,并提供它们输出的列表,以便您可以将它们用作构建自己的管道的输入。
答案 2 :(得分:0)
UIMA不强制必须存在某些类型(注释)。这是一项允许灵活性的功能。
但是,您可以使用@TypeCapability注释记录您的UIMAfit注释器。此注释的典型用法可能类似于:
@TypeCapability(
inputs="org.apache.uima.fit.type.Token",
outputs="org.apache.uima.fit.type.Token:pos")
但是,这不会强制执行类型依赖性。我在one project上所做的是在UIMA之上实施my own checking system。