Есть некоторые важные понятия, которые имеют важное значение для понимания при извлечении значений из FSArray в UIMA:
- 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 может наилучшим образом быть , описанным как экземпляр Type. FeatureStructure - это то, что вы используете для доступа к данным.
Пусть говорят, что мы имеем следующие два типа:
- com.abcColoredCar
- com.abcCar
И мы имеем следующее предложение:
Car A and car B are both blue.
Предположим, что предыдущий этап UIMA имеет аннотат ред все предложение, используя тип com.abcColoredCar следующим образом:
begin: 0
end: 24
color: "blue"
cars: FSArray
Позволяет также предположить, что известно из определения типа, что особенность машины является FSArray из com.abcCar и автомобилей содержит следующие значения :
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));
}
}
}
}
Копать глубже в это, это хорошая идея, чтобы прочитать, как тип системы, Heap и индекс Repository работает в CAS.
Какой тип элементов FSArray имеет? – rec