public Recommender(String aName, AnnotationLayer aLayer) { name = aName; project = aLayer.getProject(); layer = aLayer; }
public AnnotationFeature(long aId, AnnotationLayer aLayer, String aName, String aType) { id = aId; layer = aLayer; project = aLayer.getProject(); name = aName; uiName = aName; type = aType; }
public AnnotationFeature(long aId, AnnotationLayer aLayer, String aName, String aType) { id = aId; layer = aLayer; project = aLayer.getProject(); name = aName; uiName = aName; type = aType; }
@Override @Transactional public List<AnnotationFeature> listAttachedLinkFeatures(AnnotationLayer aLayer) { return entityManager .createQuery( "FROM AnnotationFeature WHERE linkMode in (:modes) AND project = :project AND " + "type in (:attachType) ORDER BY uiName", AnnotationFeature.class) .setParameter("modes", asList(LinkMode.SIMPLE, LinkMode.WITH_ROLE)) .setParameter("attachType", asList(aLayer.getName(), CAS.TYPE_NAME_ANNOTATION)) // Checking for project is necessary because type match is string-based .setParameter("project", aLayer.getProject()).getResultList(); }
@Override @Transactional public List<AnnotationFeature> listAttachedLinkFeatures(AnnotationLayer aLayer) { return entityManager .createQuery( "FROM AnnotationFeature WHERE linkMode in (:modes) AND project = :project AND " + "type in (:attachType) ORDER BY uiName", AnnotationFeature.class) .setParameter("modes", asList(LinkMode.SIMPLE, LinkMode.WITH_ROLE)) .setParameter("attachType", asList(aLayer.getName(), CAS.TYPE_NAME_ANNOTATION)) // Checking for project is necessary because type match is string-based .setParameter("project", aLayer.getProject()).getResultList(); }
@Override @Transactional public List<AnnotationLayer> listAttachedRelationLayers(AnnotationLayer aLayer) { return entityManager .createQuery( "SELECT l FROM AnnotationLayer l LEFT JOIN l.attachFeature f " + "WHERE l.type = :type AND l.project = :project AND " + "(l.attachType = :attachType OR f.type = :attachTypeName) " + "ORDER BY l.uiName", AnnotationLayer.class).setParameter("type", RELATION_TYPE) .setParameter("attachType", aLayer) .setParameter("attachTypeName", aLayer.getName()) // Checking for project is necessary because type match is string-based .setParameter("project", aLayer.getProject()).getResultList(); }
@Override @Transactional public List<AnnotationLayer> listAttachedRelationLayers(AnnotationLayer aLayer) { return entityManager .createQuery( "SELECT l FROM AnnotationLayer l LEFT JOIN l.attachFeature f " + "WHERE l.type = :type AND l.project = :project AND " + "(l.attachType = :attachType OR f.type = :attachTypeName) " + "ORDER BY l.uiName", AnnotationLayer.class).setParameter("type", RELATION_TYPE) .setParameter("attachType", aLayer) .setParameter("attachTypeName", aLayer.getName()) // Checking for project is necessary because type match is string-based .setParameter("project", aLayer.getProject()).getResultList(); }
@Override public List<SuggestionGroup> getSuggestions(User aUser, AnnotationLayer aLayer) { Predictions model = recommendationService.getPredictions(aUser, aLayer.getProject()); if (model == null) { return Collections.emptyList(); } Map<String, SuggestionDocumentGroup> recommendationsMap = model .getPredictionsForWholeProject(aLayer, documentService); return recommendationsMap.values().stream() .flatMap(docMap -> docMap.stream()) .collect(toList()); }
@Override public List<SuggestionGroup> getSuggestions(User aUser, AnnotationLayer aLayer) { Predictions model = recommendationService.getPredictions(aUser, aLayer.getProject()); if (model == null) { return Collections.emptyList(); } Map<String, SuggestionDocumentGroup> recommendationsMap = model .getPredictionsForWholeProject(aLayer, documentService); return recommendationsMap.values().stream() .flatMap(docMap -> docMap.stream()) .collect(toList()); }
@Override @Transactional public void createLayer(AnnotationLayer aLayer) { if (isNull(aLayer.getId())) { entityManager.persist(aLayer); } else { entityManager.merge(aLayer); } try (MDC.MDCCloseable closable = MDC.putCloseable(Logging.KEY_PROJECT_ID, String.valueOf(aLayer.getProject().getId()))) { Project project = aLayer.getProject(); log.info("Created layer [{}]({}) in project [{}]({})", aLayer.getName(), aLayer.getId(), project.getName(), project.getId()); } }
@Override @Transactional public void createLayer(AnnotationLayer aLayer) { if (isNull(aLayer.getId())) { entityManager.persist(aLayer); } else { entityManager.merge(aLayer); } try (MDC.MDCCloseable closable = MDC.putCloseable(Logging.KEY_PROJECT_ID, String.valueOf(aLayer.getProject().getId()))) { Project project = aLayer.getProject(); log.info("Created layer [{}]({}) in project [{}]({})", aLayer.getName(), aLayer.getId(), project.getName(), project.getId()); } }
@Override public List<Recommender> getActiveRecommenders(User aUser, AnnotationLayer aLayer) { RecommendationState state = getState(aUser.getUsername(), aLayer.getProject()); synchronized (state) { MultiValuedMap<AnnotationLayer, Recommender> activeRecommenders = state.getActiveRecommenders(); return new ArrayList<>(activeRecommenders.get(aLayer)); } }
/** * @return String with substituted variables */ public static Map<String, Object> parse(AnnotationLayer aLayer, List<AnnotationFeature> aFeatures, SourceDocument aDocument, AnnotationFS aAnnotation) { Map<String, Object> valuesMap = new HashMap<>(); // add some defaults valuesMap.put("PID", aLayer.getProject().getId()); valuesMap.put("PNAME", aLayer.getProject().getName()); valuesMap.put("DOCID", aDocument.getId()); valuesMap.put("DOCNAME", aDocument.getName()); valuesMap.put("LAYERNAME", aLayer.getName()); // add fields from the annotation layer features and use the values from before aFeatures.stream().forEach(feat -> { if (WebAnnoCasUtil.isPrimitiveFeature(aAnnotation, feat.getName())) { Object val = WebAnnoCasUtil.getFeature(aAnnotation, feat.getName()); if (val != null) { valuesMap.put(feat.getUiName(), String.valueOf(val)); } } }); return valuesMap; } }
@Override public List<FeatureType> getSupportedFeatureTypes(AnnotationLayer aAnnotationLayer) { List<FeatureType> types = new ArrayList<>(); // Slot features are only supported on span layers if (WebAnnoConst.SPAN_TYPE.equals(aAnnotationLayer.getType())) { // Add layers of type SPAN available in the project for (AnnotationLayer spanLayer : annotationService .listAnnotationLayer(aAnnotationLayer.getProject())) { if ( Token.class.getName().equals(spanLayer.getName()) || Sentence.class.getName().equals(spanLayer.getName())) { continue; } if (WebAnnoConst.SPAN_TYPE.equals(spanLayer.getType())) { types.add(new FeatureType(spanLayer.getName(), "Link: " + spanLayer.getUiName(), featureSupportId)); } } // Also allow the user to use any annotation type as slot filler types.add(new FeatureType(CAS.TYPE_NAME_ANNOTATION, "Link: <Any>", featureSupportId)); } return types; }
private IResourceStream exportUimaTypeSystem() { try (ByteArrayOutputStream bos = new ByteArrayOutputStream()) { TypeSystemDescription tsd = annotationService .getProjectTypes(getModelObject().getProject()); tsd.toXML(bos); return new InputStreamResourceStream(new ByteArrayInputStream(bos.toByteArray())); } catch (Exception e) { error("Unable to generate the UIMA type system file: " + ExceptionUtils.getRootCauseMessage(e)); ProjectLayersPanel.LOG.error("Unable to generate the UIMA type system file", e); RequestCycle.get().find(IPartialPageRequestHandler.class) .ifPresent(handler -> handler.addChildren(getPage(), IFeedback.class)); return null; } }
private IResourceStream exportUimaTypeSystem() { try (ByteArrayOutputStream bos = new ByteArrayOutputStream()) { TypeSystemDescription tsd = annotationService .getProjectTypes(getModelObject().getProject()); tsd.toXML(bos); return new InputStreamResourceStream(new ByteArrayInputStream(bos.toByteArray())); } catch (Exception e) { error("Unable to generate the UIMA type system file: " + ExceptionUtils.getRootCauseMessage(e)); ProjectLayersPanel.LOG.error("Unable to generate the UIMA type system file", e); RequestCycle.get().find(IPartialPageRequestHandler.class) .ifPresent(handler -> handler.addChildren(getPage(), IFeedback.class)); return null; } }
@Override public void setActiveRecommenders(User aUser, AnnotationLayer aLayer, List<Recommender> aRecommenders) { RecommendationState state = getState(aUser.getUsername(), aLayer.getProject()); synchronized (state) { MultiValuedMap<AnnotationLayer, Recommender> activeRecommenders = state .getActiveRecommenders(); activeRecommenders.remove(aLayer); activeRecommenders.putAll(aLayer, aRecommenders); } }
private void actionSave(AjaxRequestTarget aTarget) { Recommender recommender = recommenderModel.getObject(); recommender.setProject(recommender.getLayer().getProject()); recommendationService.createOrUpdateRecommender(recommender); // Reset selection after saving recommenderModel.setObject(null); statesForTraining.setObject(getAllPossibleDocumentStates()); // Reload whole page because master panel also needs to be reloaded. aTarget.add(getPage()); }
@Override public void initialize(AnnotationSchemaService aSchemaService) { AnnotationFeature relationFeature = new AnnotationFeature(); relationFeature.setType(CAS.TYPE_NAME_STRING); relationFeature.setName(COREFERENCE_RELATION_FEATURE); relationFeature.setLayer(getLayer()); relationFeature.setEnabled(true); relationFeature.setUiName("Reference Relation"); relationFeature.setProject(getLayer().getProject()); aSchemaService.createFeature(relationFeature); AnnotationFeature typeFeature = new AnnotationFeature(); typeFeature.setType(CAS.TYPE_NAME_STRING); typeFeature.setName(COREFERENCE_TYPE_FEATURE); typeFeature.setLayer(getLayer()); typeFeature.setEnabled(true); typeFeature.setUiName("Reference Type"); typeFeature.setProject(getLayer().getProject()); aSchemaService.createFeature(typeFeature); }
@Override public void initialize(AnnotationSchemaService aSchemaService) { AnnotationFeature relationFeature = new AnnotationFeature(); relationFeature.setType(CAS.TYPE_NAME_STRING); relationFeature.setName(COREFERENCE_RELATION_FEATURE); relationFeature.setLayer(getLayer()); relationFeature.setEnabled(true); relationFeature.setUiName("Reference Relation"); relationFeature.setProject(getLayer().getProject()); aSchemaService.createFeature(relationFeature); AnnotationFeature typeFeature = new AnnotationFeature(); typeFeature.setType(CAS.TYPE_NAME_STRING); typeFeature.setName(COREFERENCE_TYPE_FEATURE); typeFeature.setLayer(getLayer()); typeFeature.setEnabled(true); typeFeature.setUiName("Reference Type"); typeFeature.setProject(getLayer().getProject()); aSchemaService.createFeature(typeFeature); }