代码之家  ›  专栏  ›  技术社区  ›  kundan

如何将数据库中的CAS定义为uimaFIT中注释器的外部资源?

  •  0
  • kundan  · 技术社区  · 9 年前

    我正在尝试使用uimaFit构建数据处理管道,如下所示:

    [annotatorA] => [Consumer to dump annotatorA's annotations from CAS into DB]

    [annotatorB (should take on annotatorA's annotations from DB as input)] => [Consumer for annotatorB]

    驱动程序代码:

       /* Step 0: Create a reader */
        CollectionReader readerInstance= CollectionReaderFactory.createCollectionReader(
                FilePathReader.class, typeSystem,
                FilePathReader.PARAM_INPUT_FILE,"/path/to/file/to/be/processed");
    
       /*Step1: Define Annotoator A*/
        AnalysisEngineDescription annotatorAInstance=
               AnalysisEngineFactory.createPrimitiveDescription(
                        annotatorADbConsumer.class, typeSystem, 
                        annotatorADbConsumer.PARAM_DB_URL,"localhost",
                        annotatorADbConsumer.PARAM_DB_NAME,"xyz",
                        annotatorADbConsumer.PARAM_DB_USER_NAME,"name",
                        annotatorADbConsumer.PARAM_DB_USER_PWD,"pw");
        builder.add(annotatorAInstance);
    
        /* Step2: Define binding for annotatorB to take 
             what-annotator-a put in DB above as input */
    
        /*Step 3: Define annotator B */
        AnalysisEngineDescription annotatorBInstance =
                AnalysisEngineFactory.createPrimitiveDescription(
                        GateDateTimeLengthAnnotator.class,typeSystem)
        builder.add(annotatorBInstance);
    
        /*Step 4: Run the pipeline*/
        SimplePipeline.runPipeline(readerInstance, builder.createAggregate());
    

    我的问题是:

    1. 上述方法是否正确?
    2. 在步骤2中,我们如何定义注释器A输出在注释器B中的依赖性?

    建议的方法是 https://code.google.com/p/uimafit/wiki/ExternalResources#Resource_injection ,实现这一目标的正确方向?

    1 回复  |  直到 9 年前
        1
  •  1
  •   Renaud    9 年前

    您可以使用 @TypeCapability 这样地:

    @TypeCapability(inputs = { "com.myproject.types.MyType", ... }, outputs = { ... })
    public class MyAnnotator extends JCasAnnotator_ImplBase {
        ....
    }
    

    注意,它在注释级别而不是引擎级别定义了契约(这意味着任何引擎都可以创建 com.myproject.types.MyType ).

    我认为没有办法 执行

    我确实创建了一些代码来检查引擎是否在管道上游提供了正确的所需注释,否则会打印错误日志(请参见 Pipeline.checkAndAddCapabilities() and Pipeline.addCapabilities() ). 然而,请注意,只有当所有引擎都定义了它们的TypeCapabilities时,它才会起作用,而当使用外部引擎/库时,情况往往不是这样。