有没有办法比较管道之间的 JCas 数据?

Is there a way to compare JCas data between pipelines?

我正在建立一个基于 UIMA 和 DKPro-Core 的新框架。 该框架提供了一种配置 UIMA 管道的简单方法。

在某些 JCasAnnotator 中,我想成对比较所有文档的数据(在这种情况下,我假设是不同的 JCas 对象)或与单个 JCas.

runPipeline(createReaderDescription(SomeReader.class),
                somePreprocessingEngineDescription,
                similarityPipelineDescription,
                createEngineDescription(SomeWriter.class)
);

内部 similarityPipelineDescription 我想比较一个 JCas 与所有 JCas 的数据。

public void process(JCas aJCas) throws AnalysisEngineProcessException {
        // Compare aJcas with all other JCas objects
}

这是推荐的方式吗?有人可以这样做吗? 如果是这样,我如何才能访问其他 JCas 对象?

还是把要比较的数据先存起来,以后再比较?

通过管道传递的 (J)Cas 对象通常会被重新使用。因此,在分析引擎中保留对它们的收集引用是没有意义的,并且保留对您从它们获得的任何特征结构的引用也没有用,因为当 (J)Cas 被重置和重用时它们将失效。

您可以将数据写入磁盘,然后将其读入多个 CAS 对象,然后您可以比较这些对象。

或者,您可以实施一个分析引擎,将您感兴趣的数据提取到一组独立的对象中,并以此为基础进行比较。

如果您想进行配对比较,您还可以实施 reader 将您希望比较的数据读取到同一 CAS 的两个不同视图中,然后让您的分析引擎处理/比较它。例如,参见 DKPro TC PairReader_ImplBase 及其子类。