UIMA Ruta - 基本示例
UIMA Ruta - basic example
我正在尝试 uima ruta 的示例:
here.
我想创建 ruta 脚本并将其应用于我的文本(来自没有任何 workbench 的普通 java)。
1.how 我是否从纯 java(没有 workbench)获取类型系统描述符?
2. 我什么时候用workbench得到它? (如果我 "run" ruta 脚本,则没有进行描述。)
主要问题是脚本是否声明了新类型。
如果没有声明新类型,文档中的链接示例应该足够了。
如果在脚本中声明了新类型,则需要创建类型系统描述并将其包含在 CAS 的创建过程中,然后才能将脚本应用于 CAS。
脚本的类型系统描述包含脚本中声明的类型的类型描述,可以通过以下方式创建:
- Ruta Workbench 在保存脚本时自动为简单 Ruta 项目中的每个脚本创建类型系统描述。如果没有创建描述,则脚本很可能无法解析并且包含语法错误。
- 在 maven 构建的项目中,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());
}
免责声明:我是 UIMA Ruta 的开发者
我正在尝试 uima ruta 的示例: here.
我想创建 ruta 脚本并将其应用于我的文本(来自没有任何 workbench 的普通 java)。
1.how 我是否从纯 java(没有 workbench)获取类型系统描述符? 2. 我什么时候用workbench得到它? (如果我 "run" ruta 脚本,则没有进行描述。)
主要问题是脚本是否声明了新类型。
如果没有声明新类型,文档中的链接示例应该足够了。
如果在脚本中声明了新类型,则需要创建类型系统描述并将其包含在 CAS 的创建过程中,然后才能将脚本应用于 CAS。
脚本的类型系统描述包含脚本中声明的类型的类型描述,可以通过以下方式创建:
- Ruta Workbench 在保存脚本时自动为简单 Ruta 项目中的每个脚本创建类型系统描述。如果没有创建描述,则脚本很可能无法解析并且包含语法错误。
- 在 maven 构建的项目中,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());
}
免责声明:我是 UIMA Ruta 的开发者