【问题标题】:Exception "CASRuntimeException" while creating custom Apache UIMA CAS XML descriptor创建自定义 Apache UIMA CAS XML 描述符时出现异常“CASRuntimeException”
【发布时间】:2017-01-08 23:06:46
【问题描述】:

我正在尝试添加附加功能“版本”以在 UIMA CAS 中存储“uima.cas.Long”类型值。

我已经成功创建了如下所示的 XML 描述符:

<?xml version="1.0" encoding="UTF-8"?>
<typeSystemDescription xmlns="http://uima.apache.org/resourceSpecifier">
    <types>
    <typeDescription>
            <name>CASVersion</name>
            <description/>
            <supertypeName>uima.cas.TOP</supertypeName>
            <features>
                <featureDescription>
                    <name>Version</name>
                    <description/>
                    <rangeTypeName>uima.cas.Long</rangeTypeName>
                </featureDescription>
            </features>
        </typeDescription>
    </types>
</typeSystemDescription>

我使用“UIMA JCasGen”生成了相应的代码。

生成了以下类:

CASVersion_Type.java
CASVersion.java

现在,我想为 JCas 添加一个版本,因为我在我的 java 类中编写了以下代码:

    14: public void testAnnotation()    {
    15: JCas document = CasCreationUtils.createCas((TypeSystemDescription) null, null, null).getJCas();
    16: CASVersion version = new CASVersion(document);
    17: version.setVersion(1);

运行此代码时出现“CASRuntimeException”,如下所述:

null
org.apache.uima.cas.CASRuntimeException: JCas type "com.example.test.CASVersion" used in Java code,  but was not declared in the XML type descriptor.
    at org.apache.uima.jcas.impl.JCasImpl.getTypeInit(JCasImpl.java:456)
    at org.apache.uima.jcas.impl.JCasImpl.getType(JCasImpl.java:425)
    at org.apache.uima.jcas.cas.TOP.<init>(TOP.java:96)
    at com.example.test.CASVersion.<init>(CASVersion.java:51)
    at com.example.test.Custom.testAnnotation(Custom.java:15)

CASVersion.java第51行代码如下:

50:  public CASVersion(JCas jcas) {
51: super(jcas);
52: readObject();   
53:  } 

因为我是第一次这样做,所以我无法弄清楚如何将我的自定义 xml 描述符合并到现有的 XML 类型描述符。

如果有人能指导我,那就太好了。

提前致谢。

【问题讨论】:

    标签: exception annotations nlp cas uima


    【解决方案1】:

    这条消息

    JCas type "com.example.test.CASVersion" used in Java code,  
    but was not declared in the XML type descriptor.
    

    表示您的自定义类型的 JCas 类存在,但 UIMA 不知道描述自定义类型的 XML 描述符。假设您使用的是 uimaFIT,请确保您已通过创建指向自定义类型的 XML 描述符的 types.txt 文件来设置类型系统检测。脏话详情请参考uimaFIT documentation

    披露:我正在研究 uimaFIT

    【讨论】:

    • 我正在使用 uimaFIT 并且已经尝试了类型系统检测中提到的两种方法,但是我仍然遇到相同的异常。是否可能是 POM.xml 中缺少 uimaFIT 的任何依赖项并导致此问题?
    • 假设您将 types.txt 与 XML 类型描述符和 JCas 类维护在同一个项目中,那么 uimaFIT 应该能够在 Java 能够找到 JCas 类时发现类型 - 在这种情况下Java会给你一个“ClassNotFoundException”。您可以通过增加TypeSystemDescription 类的日志级别或在org.apache.uima.fit.factory.TypeSystemDescriptionFactory.createTypeSystemDescription() 中设置断点来调试 uimaFIT 类型检测
    【解决方案2】:

    我初始化JCas时,JCas中没有识别新类型如下:

        JCas document = CasCreationUtils.createCas((TypeSystemDescription) null, null, null).getJCas();
    

    已通过将其替换为以下任何一项来解决此问题:

        //1st way
        JCas document = JCasFactory.createJCas();
    
        //2nd way
        TypeSystemDescription tsd = TypeSystemDescriptionFactory.createTypeSystemDescription();
        JCas document = CasCreationUtils.createCas(tsd, null, null).getJCas();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-06
      • 2010-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-03
      相关资源
      最近更新 更多