JCas 类型 ...Timex3... 在 Java 代码中使用,但未在 XML 类型描述符 heideltime 中声明
JCas type ...Timex3... used in Java code, but was not declared in the XML type descriptor heideltime
我使用 gradle 配置了 heidelTime。我正在获取值,但无法遍历字符串结果。
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 文件那里定义了系统类型。
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 文件位置
当使用 UIMA 类型的 JCas class 而没有为此类型配置 CAS 时,会发生这种情况。
对
的调用
JCas cas = JCasFactory.createJCas();
扫描 class 路径以查找 META-INF/org.apache.uima.fit/
下名为 types.txt
的文件(所以一个名为 META-INF
的文件夹和一个名为 org.apache.uima.fit
的子文件夹包含types.txt
文件)并加载其中引用的所有 UIMA 类型描述符。示例 types.txt
文件如下所示:
classpath*:org/apache/uima/fit/type/Token.xml
这告诉 uimaFIT 加载位于包 org.apache.uima.fit.type
中的类型描述符文件 Token.xml
(替换为您自己的包和文件名)。
请注意,如果您使用 Maven,这些所有这些文件和文件夹通常必须在 src/main/resources
下(而不是在 src/main/java
下)。根据您设置 Gradle 的方式,这可能也适用于您。
uimaFIT 的类型 auto-detection 在 uimaFIT documentation 中也有更详细的描述。
因此对于您的特定情况:尝试将 desc/type/HeidelTime_TypeSystem.xml
放入 src/main/resources/desc/type/HeidelTime_TypeSystem.xml
并创建内容为 classpath*:desc/type/HeidelTime_TypeSystem.xml
.
的 src/main/resources/META-INF/org.apache.uima.fit/types.txt
文件
注意:在撰写本文时,我是 Apache uimaFIT 的维护者。
我使用 gradle 配置了 heidelTime。我正在获取值,但无法遍历字符串结果。
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 文件那里定义了系统类型。
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 文件位置
当使用 UIMA 类型的 JCas class 而没有为此类型配置 CAS 时,会发生这种情况。
对
的调用JCas cas = JCasFactory.createJCas();
扫描 class 路径以查找 META-INF/org.apache.uima.fit/
下名为 types.txt
的文件(所以一个名为 META-INF
的文件夹和一个名为 org.apache.uima.fit
的子文件夹包含types.txt
文件)并加载其中引用的所有 UIMA 类型描述符。示例 types.txt
文件如下所示:
classpath*:org/apache/uima/fit/type/Token.xml
这告诉 uimaFIT 加载位于包 org.apache.uima.fit.type
中的类型描述符文件 Token.xml
(替换为您自己的包和文件名)。
请注意,如果您使用 Maven,这些所有这些文件和文件夹通常必须在 src/main/resources
下(而不是在 src/main/java
下)。根据您设置 Gradle 的方式,这可能也适用于您。
uimaFIT 的类型 auto-detection 在 uimaFIT documentation 中也有更详细的描述。
因此对于您的特定情况:尝试将 desc/type/HeidelTime_TypeSystem.xml
放入 src/main/resources/desc/type/HeidelTime_TypeSystem.xml
并创建内容为 classpath*:desc/type/HeidelTime_TypeSystem.xml
.
src/main/resources/META-INF/org.apache.uima.fit/types.txt
文件
注意:在撰写本文时,我是 Apache uimaFIT 的维护者。