从CPE描述符获取UIMA类型系统

时间:2013-03-22 07:24:31

标签: java uima

我如何从CPE描述符XML文件中获取(或计算)UIMA类型系统?我已经看过我用来加载Java中的CPE描述符的类,但看不到任何能让我成为Type System的东西。

我知道CAS有一个getTypeSystem()函数,但我需要在运行CPE管道之前获取Type System(即在我有一个CAS对象之前)。

1 个答案:

答案 0 :(得分:3)

最终想出怎么做......而且它不漂亮!最终处于类似情况的其他人的代码如下。

CpeDescription cpeDesc = UIMAFramework.getXMLParser().parseCpeDescription(new XMLInputSource(cpeFile));
File rootFolder = new File(cpeDesc.getSourceUrl().getFile()).getParentFile();
ArrayList<TypeSystemDescription> typeSystems = new ArrayList<>();

for(CpeCollectionReader collReader : cpeDesc.getAllCollectionCollectionReaders()){
    File descFile = new File(rootFolder + System.getProperty("file.separator") + collReader.getDescriptor().getImport().getLocation());

    CollectionReaderDescription crd = UIMAFramework.getXMLParser().parseCollectionReaderDescription(new XMLInputSource(descFile));

    TypeSystemDescription typeSystem = crd.getCollectionReaderMetaData().getTypeSystem();
    typeSystem.resolveImports();

    typeSystems.add(typeSystem);
}

for(CpeCasProcessor casProcessor : cpeDesc.getCpeCasProcessors().getAllCpeCasProcessors()){
    File descFile = new File(rootFolder + System.getProperty("file.separator") + casProcessor.getCpeComponentDescriptor().getImport().getLocation());

    AnalysisEngineDescription aed = UIMAFramework.getXMLParser().parseAnalysisEngineDescription(new XMLInputSource(descFile));

    TypeSystemDescription typeSystem = aed.getAnalysisEngineMetaData().getTypeSystem();
    typeSystem.resolveImports();

    typeSystems.add(typeSystem);
}

TypeSystemDescription mergedTypeSystem = CasCreationUtils.mergeTypeSystems(typeSystems);

请注意,这仅考虑Imports,而不是CPE描述符中的包含。