use of de.tudarmstadt.ukp.clarin.webanno.model.AnnotationLayer in project webanno by webanno.
the class NamedEntityLayerInitializer method configure.
@Override
public void configure(Project aProject) throws IOException {
TagSet nerTagSet = JsonImportUtil.importTagSetFromJson(aProject, new ClassPathResource("/tagsets/de-ne-webanno.json").getInputStream(), annotationSchemaService);
AnnotationLayer neLayer = new AnnotationLayer(NamedEntity.class.getName(), "Named entity", SPAN_TYPE, aProject, true);
neLayer.setAllowStacking(true);
neLayer.setMultipleTokens(true);
neLayer.setLockToTokenOffset(false);
annotationSchemaService.createLayer(neLayer);
annotationSchemaService.createFeature(new AnnotationFeature(aProject, neLayer, "value", "value", CAS.TYPE_NAME_STRING, "Named entity type", nerTagSet));
}
use of de.tudarmstadt.ukp.clarin.webanno.model.AnnotationLayer in project webanno by webanno.
the class SemPredArgLayerInitializer method configure.
@Override
public void configure(Project aProject) throws IOException {
AnnotationLayer semArgLayer = new AnnotationLayer(SemArg.class.getName(), "SemArg", SPAN_TYPE, aProject, true);
semArgLayer.setAllowStacking(true);
semArgLayer.setCrossSentence(false);
semArgLayer.setLockToTokenOffset(false);
semArgLayer.setMultipleTokens(true);
annotationSchemaService.createLayer(semArgLayer);
AnnotationLayer semPredLayer = new AnnotationLayer(SemPred.class.getName(), "SemPred", SPAN_TYPE, aProject, true);
semPredLayer.setAllowStacking(true);
semPredLayer.setCrossSentence(false);
semPredLayer.setLockToTokenOffset(false);
semPredLayer.setMultipleTokens(true);
annotationSchemaService.createFeature(new AnnotationFeature(aProject, semPredLayer, "category", "category", CAS.TYPE_NAME_STRING, "Category of the semantic predicate, e.g. the frame identifier.", null));
AnnotationFeature semPredArgumentsFeature = new AnnotationFeature();
semPredArgumentsFeature.setName("arguments");
semPredArgumentsFeature.setUiName("arguments");
semPredArgumentsFeature.setDescription("Arguments of the semantic predicate");
semPredArgumentsFeature.setType(SemArg.class.getName());
semPredArgumentsFeature.setProject(aProject);
semPredArgumentsFeature.setTagset(null);
semPredArgumentsFeature.setMode(MultiValueMode.ARRAY);
semPredArgumentsFeature.setLinkMode(LinkMode.WITH_ROLE);
semPredArgumentsFeature.setLinkTypeName(SemArgLink.class.getName());
semPredArgumentsFeature.setLinkTypeRoleFeatureName("role");
semPredArgumentsFeature.setLinkTypeTargetFeatureName("target");
semPredArgumentsFeature.setLayer(semPredLayer);
annotationSchemaService.createFeature(semPredArgumentsFeature);
annotationSchemaService.createLayer(semPredLayer);
}
use of de.tudarmstadt.ukp.clarin.webanno.model.AnnotationLayer in project webanno by webanno.
the class SurfaceFormLayerInitializer method configure.
@Override
public void configure(Project aProject) throws IOException {
AnnotationLayer surfaceFormLayer = new AnnotationLayer(SurfaceForm.class.getName(), "Surface form", SPAN_TYPE, aProject, true);
surfaceFormLayer.setAllowStacking(false);
// The surface form must be locked to tokens for CoNLL-U writer to work properly
surfaceFormLayer.setLockToTokenOffset(false);
surfaceFormLayer.setMultipleTokens(true);
annotationSchemaService.createLayer(surfaceFormLayer);
AnnotationFeature surfaceFormValueFeature = new AnnotationFeature();
surfaceFormValueFeature.setDescription("Original surface text");
surfaceFormValueFeature.setName("value");
surfaceFormValueFeature.setType(CAS.TYPE_NAME_STRING);
surfaceFormValueFeature.setProject(aProject);
surfaceFormValueFeature.setUiName("Form");
surfaceFormValueFeature.setLayer(surfaceFormLayer);
annotationSchemaService.createFeature(surfaceFormValueFeature);
}
use of de.tudarmstadt.ukp.clarin.webanno.model.AnnotationLayer in project webanno by webanno.
the class TokenLayerInitializer method configure.
@Override
public void configure(Project aProject) throws IOException {
AnnotationLayer tokenLayer = new AnnotationLayer(Token.class.getName(), "Token", SPAN_TYPE, aProject, true);
annotationSchemaService.createLayer(tokenLayer);
}
use of de.tudarmstadt.ukp.clarin.webanno.model.AnnotationLayer in project webanno by webanno.
the class PreferencesUtil method loadPreferences.
/**
* Set annotation preferences of users for a given project such as window size, annotation
* layers,... reading from the file system.
*
* @param aUsername
* The {@link User} for whom we need to read the preference (preferences are stored
* per user)
* @param aRepositoryService the repository service.
* @param aAnnotationService the annotation service.
* @param aBModel
* The {@link AnnotatorState} that will be populated with preferences from the
* file
* @param aMode the mode.
* @throws BeansException hum?
* @throws IOException hum?
*/
public static void loadPreferences(String aUsername, SettingsService aSettingsService, ProjectService aRepositoryService, AnnotationSchemaService aAnnotationService, AnnotatorState aBModel, Mode aMode) throws BeansException, IOException {
AnnotationPreference preference = new AnnotationPreference();
BeanWrapper wrapper = new BeanWrapperImpl(preference);
// get annotation preference from file system
try {
Properties props = aRepositoryService.loadUserSettings(aUsername, aBModel.getProject());
for (Entry<Object, Object> entry : props.entrySet()) {
String property = entry.getKey().toString();
int index = property.indexOf(".");
String propertyName = property.substring(index + 1);
String mode = property.substring(0, index);
if (wrapper.isWritableProperty(propertyName) && mode.equals(aMode.getName())) {
if (AnnotationPreference.class.getDeclaredField(propertyName).getGenericType() instanceof ParameterizedType) {
if (entry.getValue().toString().startsWith("[")) {
// its a list
List<String> value = Arrays.asList(StringUtils.replaceChars(entry.getValue().toString(), "[]", "").split(","));
if (!value.get(0).equals("")) {
wrapper.setPropertyValue(propertyName, value);
}
} else if (entry.getValue().toString().startsWith("{")) {
// its a map
String s = StringUtils.replaceChars(entry.getValue().toString(), "{}", "");
Map<String, String> value = Arrays.stream(s.split(",")).map(x -> x.split("=")).collect(Collectors.toMap(x -> x[0], x -> x[1]));
wrapper.setPropertyValue(propertyName, value);
}
} else {
wrapper.setPropertyValue(propertyName, entry.getValue());
}
}
}
// set layers according to preferences
List<AnnotationLayer> enabledLayers = aAnnotationService.listAnnotationLayer(aBModel.getProject()).stream().filter(// only allow enabled layers
l -> l.isEnabled()).collect(Collectors.toList());
List<Long> hiddenLayerIds = preference.getHiddenAnnotationLayerIds();
enabledLayers = enabledLayers.stream().filter(l -> !hiddenLayerIds.contains(l.getId())).collect(Collectors.toList());
aBModel.setAnnotationLayers(enabledLayers);
// Get color preferences for each layer, init with legacy if not found
Map<Long, ColoringStrategyType> colorPerLayer = preference.getColorPerLayer();
for (AnnotationLayer layer : aAnnotationService.listAnnotationLayer(aBModel.getProject())) {
if (!colorPerLayer.containsKey(layer.getId())) {
colorPerLayer.put(layer.getId(), ColoringStrategyType.LEGACY);
}
}
}// no preference found
catch (Exception e) {
// If no layer preferences are defined,
// then just assume all enabled layers are preferred
List<AnnotationLayer> enabledLayers = aAnnotationService.listAnnotationLayer(aBModel.getProject()).stream().filter(// only allow enabled layers
l -> l.isEnabled()).collect(Collectors.toList());
aBModel.setAnnotationLayers(enabledLayers);
preference.setWindowSize(aSettingsService.getNumberOfSentences());
// add default coloring strategy
Map<Long, ColoringStrategyType> colorPerLayer = new HashMap<>();
for (AnnotationLayer layer : aBModel.getAnnotationLayers()) {
colorPerLayer.put(layer.getId(), ColoringStrategy.getBestInitialStrategy(aAnnotationService, layer, preference));
}
preference.setColorPerLayer(colorPerLayer);
}
aBModel.setPreferences(preference);
}
Aggregations