Java代码中使用的JCas类型,但未在XML类型描述符中声明

时间:2019-03-12 10:17:12

标签: uima dkpro-core uimafit

即使在UIMA和uimaFIT中,我还是DKPro Core的新手。我正在尝试运行一个项目,但出现错误: Java代码中使用了JCas类型“ de.tudarmstadt.ukp.dkpro.core.discourse.pdtb.DiscourseArgument”,但未在XML类型描述符中声明

在代码中,描述符:

AnalysisEngineDescription preprocessing = createEngineDescription(
                        createEngineDescription(LanguageToolSegmenter.class),
                        createEngineDescription(ParagraphAnnotator.class),
                        createEngineDescription(MateLemmatizer.class, MateLemmatizer.PARAM_LANGUAGE, "en"),
                        createEngineDescription(SnowballStemmer.class),
                        createEngineDescription(StanfordParser.class, StanfordParser.PARAM_WRITE_PENN_TREE, true),
                        createEngineDescription(StanfordSentimentAnnotator.class),
                                createEngineDescription(PDTBDiscourseAnnotator.class)
                );

de.tudarmstadt.ukp.dkpro.core.discourse.pdtb.DiscourseArgument在以下行的PDTBDiscourseAnnotator.class中使用:

 DiscourseArgument discourseArgument = new DiscourseArgument(jCas);

错误从那里开始。

据我从uimaFIT文档中了解到,如果使用uimaFIT,如果我们使用createEngineDescription(class_name),则不需要XML描述符,如果这样,那么为什么会出错: "not declared in the XML type descriptor"

其他类,例如:“ SnowballStemmer.class”使用相同的调用方式,例如使用jcas参数实例化另一个类

Stem stemAnnot = new Stem(jcas, fs.getBegin(), fs.getEnd());

但在这些情况下不会发生错误。

有关此错误的任何想法或线索吗?我的理解正确吗

1 个答案:

答案 0 :(得分:1)

当您生成给定类型的JCas类并在代码中使用它时,会出现此错误,但同时(J)CAS尚未使用包含该类型的类型系统进行初始化。

实际上是什么意思?

  • 您在某处有一些UIMA类型系统描述XML文件,用于定义您的类型DiscourseArgument
  • 您已经使用JCasGen从该类型系统创建JCas Java类。
  • 您正在使用uimaFIT来构建管道(即createEngineDescription(...))。
  • uimaFIT自动扫描UIMA类型系统描述XML文件的类路径,以在初始化管道时使用。
  • 但是,您没有使uimaFIT意识到您自己的类型描述文件,因此uimaFIT找不到该文件,并且您收到错误消息。

如何解决?

您需要遵循一些约定,以便uimaFIT能够detect and load自定义类型:

  • 在源文件夹中创建文件META-INF/org.apache.uima.fit/types.txt(如果您使用的是Maven,则在src/main/resources下。
  • 在其中输入类型描述xml文件的位置,例如classpath*:some/package/my-custom-type-description.xml

一旦这样做,uimaFIT应该会自动检测到您的类型,并且错误应该消失。

为什么DKPro Core自己的类不会发生这种情况?

因为DKPro Core工件包括META-INF/org.apache.uima.fit/types.txt文件,这些文件允许uimaFIT自动检测类型。