0

为了评估我的 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 覆盖。如何避免这种情况以及如何正确建立我的列表?JCas goldJCas = JCasFactory.createJCas()在调用next()迭代器并将 JCas 添加到列表之前,我尝试创建一个新的 JCas 对象。但我仍然得到相同的结果。

4

1 回答 1

1

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

如果你想要一个 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);
}
于 2019-12-05T18:43:35.567 回答