对于我的uimaFIT-管道的评估,我希望构建一个JCas实例列表,这些实例由管道注释并写入xmi-文件。在我的评估中,我读取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);
}问题是,在时间循环的每一次迭代中,在迭代之前添加的列表中的JCas都会被当前的JCas覆盖。如何避免这种情况,以及如何正确地建立我的列表?我尝试用JCas goldJCas = JCasFactory.createJCas()创建一个新的JCas对象,然后调用迭代器上的next()并将JCas添加到列表中。但我还是得到了同样的结果。
发布于 2019-12-05 18:43:35
由JCas返回的iteratePipeline实例总是相同的--它被重用。这是出于性能原因。
如果你想要一个JCas的列表,你可以这样做。
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);
}https://stackoverflow.com/questions/59200446
复制相似问题