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

时间:2019-04-11 21:04:23

标签: java uima dkpro-core uimafit

我正在建立一个基于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对象的访问权限?

还是应该保存要比较的数据,以后再进行比较?

1 个答案:

答案 0 :(得分:1)

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

您可以将数据写入磁盘,然后再将其读取到多个CAS对象中,然后可以进行比较。

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

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