Тип 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

1 ответ

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

Призыв к

JCas cas = JCasFactory.createJCas();

сканирует путь к классам для файлов с именем types.txt под META-INF/org.apache.uima.fit/ (поэтому папка с названием META-INF с подпапкой под названием org.apache.uima.fit который затем содержит types.txtfile) и загружает все дескрипторы типов 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.

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