У вас есть вопрос, можно ли вставлять аннотации (найденные другими системами) в RUTA перед запуском анализа RUTA? Так что, если это вопрос, ответ - «да, это возможно».
Вы можете сделать что-то вроде этого:
private static createCASAnnotation(Cas cas, MyOwnAnnotation myOwnAnnotation) {
Type annotationType = cas.getTypeSystem().getType(myOwnAnnotation.getType());
if (annotationType != null) {
AnnotationFS casAnnotation = cas.createAnnotation(annotationType, myOwnAnnotation.getTextStart(), myOwnAnnotation.getTextEnd());
// Also possible to add features / child annotations
for (MyOwnAnnotation childAnnotation : myOwnAnnotation.getChildAnnotations()) {
String featureFullName = casAnnotation.getType().getName() + ":" + childAnnotation.getName();
Feature feature = casAnnotation.getCAS().getTypeSystem().getFeatureByFullName(featureFullName);
if (feature != null && feature.getRange().isPrimitive()
&& "uima.cas.String".equalsIgnoreCase(feature.getRange().getName())) {
casAnnotation.setStringValue(feature, childAnnotation.getText());
// Other options for example "uima.cas.Integer" -> casAnnotation.setIntValue(...
}
// if not primitive you can also add Annotation type:
// AnnotationFS childCASAnnotation = createCASAnnotation(...
// casAnnotation.setFeatureValue(feature, childCASAnnotation);
}
cas.addFsToIndexes(casAnnotation);
} else {
log.error("invalid type .... or something better");
// Or throw exception
}
}
MyOwnAnnotation - это объект из вашего собственного домена / системы и может быть примерно таким:
class MyAnnotation {
private final String value; // or text or fragment ...??
private final Long startIndex;
private final Long endIndex; // or use size/length
private final List<MyAnnotation> childAnnotations;
// constructor, builder pattern?, getters ....
}
Примеры кода предназначены для демонстрации концепции.
Мой вопрос больше связан с использованием существующих функций аннотаций, таких как длина, тип и так далее.
Вы можете привести здесь пример файла MyOwnAnnotation myOwnAnnotation? это написано на Яве или каких-то правилах рута?
Обычный Java-объект. Я обновлю пример указанными файлами.
Вы не можете напрямую включать Java-код в UIMA Ruta. Однако вы можете создать механизм анализа и выполнить его в своем коде Ruta. Во многих ситуациях, таких как назначение функций, вам не нужен код Java, поскольку функциональность может быть напрямую выражена в Ruta.