2

在我的 UIMA 应用程序中,我有一些注释器必须在某个注释器运行后运行。

起初,我考虑将这些注释器聚合在一起,但我还有其他注释器也依赖于这个(和其他)注释器,这使得聚合变得困难和/或不切实际。

我阅读了关于 Type Capabilities 的文章,如果我理解正确,它会告诉 UIMA 在用作Input Type. 我希望 UIMA 在运行没有注释器的管道时会给我一些警告,这些注释器有一些输出类型被声明为使用的注释器的输入类型。相反,注释器会像往常一样继续运行/处理。

有没有办法实现我想要的,或者这只是不必要的?如果这很重要,我目前正在使用 SimplePipeline。

TL;DR:我的目标是,如果管道中缺少某些其他注释器/计划在这些注释器之后,注释器将拒绝运行

提前致谢。

4

3 回答 3

3

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)

于 2015-06-10T07:35:33.703 回答
1

在 UIMA 中,确保注释器提供所需注释的主要方法是将注释器聚合在一起。因此,要回答您的问题,这就是您将如何实现您想要的,因为您想要做的事情(让 UIMA 通过 Type Capabilities 计算我们所有的依赖项并提供警告)对于一组独立的注释器来说既不可能也不实际.

我的问题是,为什么通过聚合注释器来确定我们的依赖关系如此困难?您是否意识到您可以聚合聚合管道?如果它们正常运行,它们应该具有完整的所有注释依赖项,并提供它们输出的列表,以便您可以将它们用作构建自己的管道的输入。

于 2015-06-09T15:21:05.173 回答
1

UIMA 不强制某些类型(注释)必须存在。这是一个允许灵活性的功能。

但是,您可以使用 @TypeCapability 注释记录您的 UIMAfit 注释器。此注释的典型用法可能类似于:

@TypeCapability(
  inputs="org.apache.uima.fit.type.Token", 
  outputs="org.apache.uima.fit.type.Token:pos")

尽管如此,这并不强制执行类型依赖。我在一个项目中所做的就是在 UIMA 之上实现我自己的检查系统。

于 2015-06-09T16:34:49.590 回答