uimaFIT:构建 JCas 实例列表

uimaFIT: Build up a list of JCas instances

为了评估我的 uimaFIT 管道,我想建立一个由管道注释并写入 xmi 文件的 JCas 实例列表。在我的评估中,我阅读了 xmi 文件并希望访问每个 xmi 文件的 JCas 并将其保存在列表中以便进一步处理它们。

JCasIterable goldIterable = SimplePipeline.iteratePipeline(xmiReaderGold);
JCasIterator goldIterator = goldIterable.iterator();

ArrayList<JCas> goldJCasList = new ArrayList<JCas>();

while (goldIterator.hasNext()) {
    JCas goldJCas = goldIterator.next().getCas().getJCas();
    goldJCasList.add(goldJCas);
}

问题在于,在 while 循环的每次迭代中,列表中已在迭代中添加的 JCas 都会被当前 JCas 覆盖。我该如何避免这种情况以及如何正确建立我的列表?在迭代器上调用 next() 并将 JCas 添加到列表之前,我尝试使用 JCas goldJCas = JCasFactory.createJCas() 创建一个新的 JCas 对象。但我仍然得到相同的结果。

iteratePipeline 返回的 JCas 实例始终是同一个 - 它被重新使用。这是出于性能原因。

如果你想要一个 JCas-es 列表,你可以像这样做

CollectionReader reader = CollectionReaderFactory.createReader(MyReader.class, <parameters>);
List<JCas> documents = new ArrayList<>();
while (reader.hasNext()) {
   JCas document = JCasFactory.createJCas();
   reader.getNext(document.getCas());
   documents.add(document);
}