2016-11-19 4 views
1

나는 uima ruta의 예를 시도하고있다 : here.UIMA Ruta - 기본 예

나는 ruta 스크립트를 만들어 내 텍스트에 적용하려고합니다 (어떤 작업대도없는 일반 java에서).

1. 어떻게하면 일반 Java (workbench없이)에서 유형 시스템 설명자를 얻을 수 있습니까? 2. 언제 작업대로 가져올 수 있습니까? (내가 루타 스크립트를 "실행"하는 경우 설명이 없습니다.)

답변

2

주된 질문은 스크립트가 새로운 유형을 선언하는지 여부입니다.

새로운 유형이 선언되지 않은 경우 문서에 링크 된 예제로 충분해야합니다.

새 유형이 스크립트에 선언 된 경우 스크립트를 CAS에 적용하려면 유형 시스템 설명을 만들어 CAS의 작성 프로세스에 포함시켜야합니다.

다음과 같은 방법을 만들 수 있습니다 스크립트 내에서 선언 된 유형의 유형 설명이 포함 된 스크립트의 형식 시스템 설명 :

    루타 워크 벤치는 간단한 내의 각 스크립트 자동 형 시스템 설명을 작성
  • 스크립트가 저장되면 Ruta Project. 설명을 작성하지 않으면 스크립트는 분석 할 수 없을 가능성이 높으며 구문 오류가 있습니다.
  • 메이븐 빌드 프로젝트에서는 ruta-maven-plugin을 사용하여 Ruta 스크립트의 유형 시스템 설명을 만들 수 있습니다.
  • 일반 Java에서는 RutaDescriptorFactory를 사용하여 프로그래밍 방식으로 유형 시스템 설명을 만들 수 있습니다. 다음은 code example입니다.

일반 Java 코드에서 ruta 기반 분석 엔진을 만들고 실행하는 데는 여러 가지 방법이 있습니다. 여기에 추가 파일을 사용하지 않고 예제 :

String rutaScript = "DECLARE MyType; CW{-> MyType};"; 

RutaDescriptorFactory descriptorFactory = new RutaDescriptorFactory(); 
RutaBuildOptions options = new RutaBuildOptions(); 
options.setResolveImports(true); 
options.setImportByName(true); 
RutaDescriptorInformation descriptorInformation = descriptorFactory 
     .parseDescriptorInformation(rutaScript, options); 
// replace null values for build environment if necessary (e.g., location in classpath) 
Pair<AnalysisEngineDescription, TypeSystemDescription> descriptions = descriptorFactory 
     .createDescriptions(null, null, descriptorInformation, options, null, null, null); 

AnalysisEngineDescription rutaAnalysisEngineDescription = descriptions.getKey(); 
rutaAnalysisEngineDescription.getAnalysisEngineMetaData().getConfigurationParameterSettings().setParameterValue(RutaEngine.PARAM_RULES, rutaScript); 
TypeSystemDescription rutaTypeSystemDescription = descriptions.getValue(); 
// directly set type system description since no file will be created 
rutaAnalysisEngineDescription.getAnalysisEngineMetaData().setTypeSystem(rutaTypeSystemDescription); 

ResourceManager resourceManager = UIMAFramework.newDefaultResourceManager(); 
AnalysisEngine ae = UIMAFramework.produceAnalysisEngine(rutaAnalysisEngineDescription); 

List<TypeSystemDescription> typeSystemDescriptions = new ArrayList<>(); 
TypeSystemDescription scannedTypeSystemDescription = TypeSystemDescriptionFactory.createTypeSystemDescription(); 
typeSystemDescriptions.add(scannedTypeSystemDescription); 
typeSystemDescriptions.add(rutaTypeSystemDescription); 
TypeSystemDescription mergeTypeSystemDescription = CasCreationUtils.mergeTypeSystems(typeSystemDescriptions, resourceManager); 

JCas jCas = JCasFactory.createJCas(mergeTypeSystemDescription); 
CAS cas = jCas.getCas(); 
jCas.setDocumentText("This is my document."); 
ae.process(jCas); 

Collection<AnnotationFS> select = CasUtil.select(cas, cas.getTypeSystem().getType("Anonymous.MyType")); 
for (AnnotationFS each : select) { 
    System.out.println(each.getCoveredText()); 
} 

면책 조항 : 나는 당신의 대답에 대한

+0

감사합니다 UIMA 루타의 개발자입니다. 나는 RutaDescriptorFactory 예제를 이해하고 있는지 확신 할 수 없다. 위의 예제에 어떻게 삽입 할 수 있는가? ([link] (https://uima.apache.org/d/ruta-current/tools.ruta.book.html) # ugr.tools.ruta.ae.basic.apply)) – CyKon

+0

답변을 연장합니다 –

+0

대단히 감사합니다! :-) – CyKon