Тип JCas, используемый в коде Java, но не был объявлен в дескрипторе типа XML
Я новичок в DKPro Core даже в UIMA и uimaFIT. Я пытаюсь запустить проект, но получаю сообщение об ошибке: JCas type "de.tudarmstadt.ukp.dkpro.core.discourse.pdtb.DiscourseArgument
"используется в коде Java, но не был объявлен в дескрипторе типа 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 нам не нужен XML-дескриптор, если мы используем createEngineDescription(class_name), если так, то почему ошибка говорит: "not declared in the XML type descriptor"
,
Другие классы, например:SnowballStemmer.class
msgstr "использовать тот же тип вызова, что и создать другой класс с аргументом jcas
Stem stemAnnot = new Stem(jcas, fs.getBegin(), fs.getEnd());
но ошибка не происходит в этих случаях.
Любая идея или подсказка об этой ошибке? Верно ли мое понимание
1 ответ
Эта ошибка появляется, когда вы сгенерировали класс JCas, который дал данный тип и использовал его в своем коде, но в то же время (J)CAS не был инициализирован системой типов, содержащей этот тип.
Что это означает на практике?
- У вас есть где-нибудь XML-файл описания системы типов UIMA, который определяет ваш тип
DiscourseArgument
, - Вы использовали JCasGen для создания Java-класса JCas из этой системы типов.
- Вы используете uimaFIT для построения своего конвейера (т.е.
createEngineDescription(...)
). - uimaFIT автоматически сканирует путь к классу для файлов XML описания системы типов UIMA, чтобы использовать их при инициализации конвейера.
- Однако вы не уведомили uimaFIT о своем собственном файле описания типа, и поэтому uimaFIT не находит его, и вы получаете сообщение об ошибке.
Как это решить?
Вы должны следовать некоторым соглашениям, чтобы uimaFIT мог обнаружить и загрузить ваш пользовательский тип:
- создать файл
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 включают META-INF/org.apache.uima.fit/types.txt
файлы, которые позволяют uimaFIT автоматически определять типы.