gpt4 book ai didi

java - 从 UIMA FSArray 中检索值

转载 作者:行者123 更新时间:2023-11-30 10:44:07 25 4
gpt4 key购买 nike

我有一个注释,它具有 FSArray 类型的特征。此功能应包含一个字符串列表。

FSArray fsArray = (FSArray)annotation.getFeatureValue(fe);

如何从 FSArray 中获取字符串列表?

通过 fsArray.toStringArray() 循环只返回字符串“FSArray”而不是实际值。

最佳答案

在 UIMA 中从 FSArray 检索值时,有一些重要的概念需要理解:

  • org.apache.uima.cas.Type - 类型描述数据模型。它是类似于java中类的概念。一个类型有一个名字空间它定义了属性(特征)。
  • org.apache.uima.cas.Feature - 是由类型描述的属性。
  • org.apache.uima.jcas.cas.TOP - 是最通用的类​​型,可以与 java.lang.Object 进行比较。
  • org.apache.uima.cas.FeatureStructure - FeatureStructure 最好是描述为类型的实例。 FeatureStructure 就是你用于访问数据。

假设我们有以下两种类型:

  • com.a.b.c.ColoredCar
  • com.a.b.c.Car

我们有以下句子:

Car A and car B are both blue.

假设之前的 UIMA 阶段使用类型 com.a.b.c.ColoredCar 对整个句子进行了注释,如下所示:

begin: 0
end: 24
color: "blue"
cars: FSArray

还假设我们从类型定义中知道特征汽车是 com.a.b.c.Car 的 FSArray 并且 Car 包含以下值:

begin: 4
end: 5
manufacturer: "Volvo"

begin: 14
end: 15
manufacturer: "Toyota"

下面的代码将演示如何检索汽车 FSArray 的制造商属性/特征。

public void process(JCas aJCas) throws AnalysisEngineProcessException {
List<TOP> tops = new ArrayList<TOP>(JCasUtil.selectAll(aJCas));
List<String> manufacturers = new ArrayList<>();
for (TOP t : tops) {
if (t.getType().getName().endsWith("ColoredCar")) {
Feature carsFeature = t.getType().getFeatureByBaseName("cars");
FSArray fsArray = (FSArray) t.getFeatureValue(carsFeature);
FeatureStructure[] arrayStructures = fsArray.toArray();
for (int i = 0; i < arrayStructures.length; i++) {
FeatureStructure fs = arrayStructures[i];
Feature manufacturerFeature = fs.getType().getFeatureByBaseName("cars");
manufacturers.add(fs.getStringValue(manufacturerFeature) );
}
}
}
}

要深入了解这一点,最好阅读类型系统、堆和索引存储库在 CAS 中的工作原理。

关于java - 从 UIMA FSArray 中检索值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37507763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com