Тип JCas, используемый в коде Java, но не был объявлен в дескрипторе типа XML - PullRequest
0 голосов
/ 12 марта 2019

Я новичок в DKPro Core даже в UIMA и uimaFIT.Я пытаюсь запустить проект, но получаю сообщение об ошибке: JCas тип "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" useвызов такого же типа, как создание другого класса с аргументом jcas

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

, но в этих случаях ошибки не происходит.

Есть идеи или подсказки об этой ошибке?Правильно ли мое понимание

1 Ответ

1 голос
/ 12 марта 2019

Эта ошибка появляется, когда вы сгенерировали класс 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 Core включают в себя META-INF/org.apache.uima.fit/types.txt файлы, которые позволяют uimaFIT автоматически определять типы.

...