Тип 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.classmsgstr "использовать тот же тип вызова, что и создать другой класс с аргументом 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 автоматически определять типы.

Другие вопросы по тегам