即使在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());
但在这些情况下不会发生错误。
有关此错误的任何想法或线索吗?我的理解正确吗
答案 0 :(得分:1)
当您生成给定类型的JCas类并在代码中使用它时,会出现此错误,但同时(J)CAS尚未使用包含该类型的类型系统进行初始化。
实际上是什么意思?
DiscourseArgument
。createEngineDescription(...)
)。如何解决?
您需要遵循一些约定,以便uimaFIT能够detect and load自定义类型:
META-INF/org.apache.uima.fit/types.txt
(如果您使用的是Maven,则在src/main/resources
下。classpath*:some/package/my-custom-type-description.xml
一旦这样做,uimaFIT应该会自动检测到您的类型,并且错误应该消失。
为什么DKPro Core自己的类不会发生这种情况?
因为DKPro Core工件包括META-INF/org.apache.uima.fit/types.txt
文件,这些文件允许uimaFIT自动检测类型。