2013-03-22 1 views
2

CPE 설명자 XML 파일에서 UIMA 유형 시스템을 가져 오는 (또는 컴퓨팅하는) 방법은 무엇입니까? Java에서 CPE 설명자를로드하는 데 사용하는 클래스를 살펴 보았지만 타입 시스템을 얻을 수있는 것을 볼 수 없습니다.CPE 설명자에서 UIMA 유형 시스템 가져 오기

CAS에 getTypeSystem() 함수가 있다는 것을 알고 있지만 CPE 파이프 라인을 실행하기 전에 (즉 CAS 객체가 있기 전에) 유형 시스템을 가져와야합니다.

답변

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); 

CPE 디스크립터에는 Imports 만 포함되며 CPE 디스크립터에는 포함되지 않습니다.