UIMA CAS FSIndex 存储库合并

问题描述 投票:0回答:1

我目前正在使用 JAVA 11 中的 UIMA 框架进行项目。

对我们来说,一个有趣的途径是多线程,特别是在多线程环境中使用 CAS 对象。由于 CAS 对象不是线程安全的,我们考虑使用 View 来写入然后合并不同的 View。

合并步骤是必要的,因为在管道中的某个时刻,节点可能依赖于两个父节点注释来继续。

我了解到 CAS 对象将注释存储在 FSIndexRepository 内,并且 CAS 对象的每个视图都有自己的 FSIndexRepository。

这就是我提出问题的方式,是否有一种方法可以合并两个 CAS 视图?

java uima
1个回答
0
投票

视图是 CAS 对象的一部分,因此您也不应该将它们视为线程安全的。

在多线程环境中使用 CAS 对象的常见方法是使用以下简单方法:

  • 每个线程处理一个 CAS

或者更复杂的方式:

  • 使用 CasMultiplier 将一个 CAS 拆分为多个 CAS
  • 每个线程处理每个拆分的 CAS
  • 使用 CasMultiplier 将结果合并回单个 CAS

CasMultiplier 通常会在内部使用 CasCopier 在源 CAS 对象和目标 CAS 对象之间传输 FeatureStructures。

当然,您可以使用没有 UIMA 流水线模型(即没有 CasMultiplier)的 CAS,但是使用 CasCopier 首先将数据从源 CAS 分发到多个目标 CAS,单独处理这些数据,然后合并回来的方法保持不变。

请注意,您可以在 CAS 中设置标记,以告诉 UIMA 跟踪创建标记后添加的任何FeatureStructure。您可以在创建每个拆分 CAS 后设置此标记,以帮助您发现每个副本中哪些是新的 FeatureStructure,然后在最后一步中使用 CasCopier 将这些新的功能结构合并回原始 CAS。

披露:我是 Apache UIMA 项目的贡献者。

© www.soinside.com 2019 - 2024. All rights reserved.