Тип JCas ...Timex3... использовался в коде Java, но не был объявлен в дескрипторе типа XML heideltime

Я настроил heidelTime с помощью gradle. Я получаю значения, но не могу перебирать результат строки.

result = heidelTime.process(sentence, new Date());
JCas cas = JCasFactory.createJCas();
FSIterator it = cas.getAnnotationIndex(Timex3.type).iterator(); // Here I am getting error

Ошибка связана с JCasImpl.class->TOP_Type getType(int i)

if (this.casImpl.getTypeSystem().getType(typeName) == null) {
            // no - report error that JCAS type was not defined in XML
            // descriptor
            CASRuntimeException casEx = new CASRuntimeException(
                CASRuntimeException.JCAS_TYPE_NOT_IN_CAS, new String[] { typeName });
            throw casEx;
          }

Я проверил проект github и вижу там файлы HeidelTime_TypeSystem.xml, определяющие тип System.

Конфигурация Gradle

compile group: 'com.github.heideltime', name: 'heideltime', version: '2.2.1'
compile group: 'org.apache.uima', name: 'uimaj-core', version: '2.3.1'

Трассировки стека

org.apache.uima.cas.CASRuntimeException: JCas type de.unihd.dbs.uima.types.heideltime.Timex3" used in Java code,  but was not declared in the XML type descriptor.
            at org.apache.uima.jcas.impl.JCasImpl.getType(JCasImpl.java:412) ~[uimaj-core-2.3.1.jar:2.3.1]
            at org.apache.uima.jcas.impl.JCasImpl.getCasType(JCasImpl.java:436) ~[uimaj-core-2.3.1.jar:2.3.1]
            at org.apache.uima.jcas.impl.JCasImpl.getAnnotationIndex(JCasImpl.java:1531) ~[uimaj-core-2.3.1.jar:2.3.1]

Нужно ли мне добавлять какие-либо файлы вручную, чтобы заставить его работать?

расположение файла types.txt

Тип JCas ...Timex3... использовался в коде Java, но не был объявлен в дескрипторе типа XML heideltime

Обычно я получаю такую ​​ошибку, когда забываю добавить описание системы типов в файл types.txt. Можете ли вы проверить, содержит ли jcas.getTypeSystem() тип? У вас есть файл type.txt, определяющий систему типов heideltime?

Peter Kluegl 16.05.2019 09:36
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
167
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это происходит, когда класс JCas для типа UIMA используется без настройки CAS для этого типа.

Призыв к

JCas cas = JCasFactory.createJCas();

сканирует путь к классам на наличие файлов с именем types.txt в META-INF/org.apache.uima.fit/ (то есть папка с именем META-INF с подпапкой с именем org.apache.uima.fit, которая затем содержит файл types.txt) и загружает все дескрипторы типа UIMA, на которые есть ссылки внутри них. Пример файла types.txt выглядит так:

classpath*:org/apache/uima/fit/type/Token.xml

Это говорит uimaFIT загрузить файл дескриптора типа Token.xml, расположенный в пакете org.apache.uima.fit.type (замените его собственными именами пакета и файла).

Обратите внимание: если вы используете Maven, все эти файлы и папки обычно должны находиться под src/main/resources (а не под src/main/java). В зависимости от того, как вы настроили свой Gradle, это может относиться и к вам.

Автоматическое определение типа uimaFIT также более подробно описано в статье документация uimaFIT.

Итак, для вашего конкретного случая: попробуйте поместить desc/type/HeidelTime_TypeSystem.xml в src/main/resources/desc/type/HeidelTime_TypeSystem.xml и создать файл src/main/resources/META-INF/org.apache.uima.fit/types.txt с содержимым classpath*:desc/type/HeidelTime_TypeSystem.xml.

Примечание. На момент написания я являюсь сопровождающим Apache uimaFIT.

У меня есть настройка проекта как сборка gradle, и я не нахожу местоположение, указанное в документе, я обновил вопрос со скриншотом того, где я разместил в проекте gradle, но не повезло

Sandip Bantawa 17.05.2019 10:18

Расположение файла types.txt выглядит хорошо. Каково содержимое файла? И где находится XML-файл дескриптора типа, который содержит определение de.unihd.dbs.uima.types.heideltime.Timex3?

rec 17.05.2019 13:13

classpath*:/home/julian/heideltime/heideltime-kit/desc/type/‌​HeidelTime_TypeSyste‌​m.xml

Sandip Bantawa 17.05.2019 13:13

Это не похоже на расположение относительно пути к классам. Попробуйте поместить desc/type/HeidelTime_TypeSystem.xml в src/main/resources/desc/type/HeidelTime_TypeSystem.xml и использовать classpath*:desc/type/HeidelTime_TypeSystem.xml в файле types.txt.

rec 17.05.2019 16:09

Я обновил основной ответ текстом из моего предыдущего комментария.

rec 20.05.2019 16:26

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