UIMA注释功能是否有通用类型?

时间:2014-01-02 17:30:52

标签: java uima

是否存在类似于Java中的Object的泛型类型,它允许将不同类型的值设置为它?

<typeDescription>
    <name>com.example.Annotation</name>
    <description></description>
    <supertypeName>uima.tcas.Annotation</supertypeName>
    <features>
        <featureDescription>
            <name>exampleFeature</name>
            <description>An example feature</description>
            <rangeTypeName>uima.cas.Generic</rangeTypeName>
        </featureDescription>
    </features>
</typeDescription>

我已尝试在<rangeTypeName>中添加以下内容:

  • java.lang.Object 对象这不起作用,尝试使用JCasGen生成代码时收到以下消息:

    JCasGen警告: ** 资源初始化在实例化CAS类型系统时发生错误。继续,但可能会生成错误。由“未定义类型”对象“引起,在”com.example.Annotation“类型上声明的功能”exampleFeature“中引用。

  • uima.cas.TOP 这会生成代码,但在我尝试通过setExampleField()或{int传递String方法时会出错。 {1}}因为它无法将它们转换为TOP类型。

1 个答案:

答案 0 :(得分:3)

uima.cas.TOP 是UIMA的对象等价类型。但它与您的预期略有不同。 UIMA有两个概念:1) FeatureStructure ,2)原始类型(int,boolean等和String!)。如果你将一个特征的范围设置为TOP,它可以接受任何类型的特征结构(即从TOP继承的任何东西),但不能接受任何原始类型 - 这里没有自动装箱。如果将范围设置为基本类型,则它只接受该类型。

解决方法可能是定义自定义类型,例如FSInt,FSString,FSBoolean,它继承自TOP,并且具有相应类型(int,String,boolean)的“值”特征。然后,您可以设置该FS中的值,并将其分配给范围为TOP的要素。

注意:我目前是Apache UIMA项目的提交者。