+
${languageResource.get("modelSelection")}
+
+ <#list modelCategories as category>
+
+ ${category.getCategoryName()}
+
+ >
+ <#list category.getModels() as model>
+
+ ${model.getName()}
+
+ #list>
+
+
+ #list>
+
+
+ #if>
@@ -300,6 +326,9 @@
+
+
+
+ <#include "*/wiki/components/breadcrumbs.ftl">
+
+
+
+
+ <#include "*/wiki/components/metadata.ftl">
+
+
+
+
+ <#assign model = vm.getWikiModel()>
+ <#include "*/wiki/components/modelInfo.ftl">
+
+
+
+
+
+
+ <#assign emotion = vm.getWikiModel()>
+
+ <#list emotion.collectEmotionValues() as emotionValuePair>
+
+
+
+ ${emotionValuePair.getLeft()}:
+
+
+ ${emotionValuePair.getRight()}
+
+
+
+ #list>
+
+
+
+
+
+
+ <#assign document = vm.getDocument()>
+ <#assign searchId = "">
+ <#assign reduced = true>
+ <#include '*/search/components/documentCardContent.ftl' >
+
+
+
+
+
+ <#assign unique = (vm.getWikiModel().getUnique())!"none">
+ <#assign height = 500>
+ <#if unique != "none">
+
+ <#include "*/wiki/components/linkableSpace.ftl">
+
+ #if>
+
+
+
diff --git a/uce.portal/resources/templates/wiki/pages/offensiveSpeechAnnotationPage.ftl b/uce.portal/resources/templates/wiki/pages/offensiveSpeechAnnotationPage.ftl
new file mode 100644
index 00000000..d960757e
--- /dev/null
+++ b/uce.portal/resources/templates/wiki/pages/offensiveSpeechAnnotationPage.ftl
@@ -0,0 +1,61 @@
+
+
+
+
+ <#include "*/wiki/components/breadcrumbs.ftl">
+
+
+
+
+ <#include "*/wiki/components/metadata.ftl">
+
+
+
+
+ <#assign model = vm.getWikiModel()>
+ <#include "*/wiki/components/modelInfo.ftl">
+
+
+
+
+
+
+ <#assign offensiveSpeech = vm.getWikiModel()>
+
+ <#list offensiveSpeech.collectOffensiveSpeechValues() as propertyPair>
+
+
+
+ ${propertyPair.getLeft()}:
+
+
+ ${propertyPair.getRight()}
+
+
+
+ #list>
+
+
+
+
+
+
+ <#assign document = vm.getDocument()>
+ <#assign searchId = "">
+ <#assign reduced = true>
+ <#include '*/search/components/documentCardContent.ftl' >
+
+
+
+
+
+ <#assign unique = (vm.getWikiModel().getUnique())!"none">
+ <#assign height = 500>
+ <#if unique != "none">
+
+ <#include "*/wiki/components/linkableSpace.ftl">
+
+ #if>
+
+
+
diff --git a/uce.portal/resources/templates/wiki/pages/sentimentAnnotationPage.ftl b/uce.portal/resources/templates/wiki/pages/sentimentAnnotationPage.ftl
new file mode 100644
index 00000000..db0e6fa5
--- /dev/null
+++ b/uce.portal/resources/templates/wiki/pages/sentimentAnnotationPage.ftl
@@ -0,0 +1,62 @@
+
+
+
+
+ <#include "*/wiki/components/breadcrumbs.ftl">
+
+
+
+
+ <#include "*/wiki/components/metadata.ftl">
+
+
+
+
+ <#assign model = vm.getWikiModel()>
+ <#include "*/wiki/components/modelInfo.ftl">
+
+
+
+
+
+
+ <#assign sentiment = vm.getWikiModel()>
+
+ <#list sentiment.loopThroughProperties() as propertyPair>
+
+
+
+ ${propertyPair.getLeft()}:
+
+
+ ${propertyPair.getRight()}
+
+
+
+ #list>
+
+
+
+
+
+
+ <#assign document = vm.getDocument()>
+ <#assign searchId = "">
+ <#assign reduced = true>
+ <#include '*/search/components/documentCardContent.ftl' >
+
+
+
+
+
+ <#assign unique = (vm.getWikiModel().getUnique())!"none">
+ <#assign height = 500>
+ <#if unique != "none">
+
+ <#include "*/wiki/components/linkableSpace.ftl">
+
+ #if>
+
+
+
+
diff --git a/uce.portal/resources/templates/wiki/pages/toxicAnnotationPage.ftl b/uce.portal/resources/templates/wiki/pages/toxicAnnotationPage.ftl
new file mode 100644
index 00000000..63b8c638
--- /dev/null
+++ b/uce.portal/resources/templates/wiki/pages/toxicAnnotationPage.ftl
@@ -0,0 +1,61 @@
+
+
+
+
+ <#include "*/wiki/components/breadcrumbs.ftl">
+
+
+
+
+ <#include "*/wiki/components/metadata.ftl">
+
+
+
+
+ <#assign model = vm.getWikiModel()>
+ <#include "*/wiki/components/modelInfo.ftl">
+
+
+
+
+
+
+ <#assign toxic = vm.getWikiModel()>
+
+ <#list toxic.getToxicValues() as tv>
+
+
+
+ ${tv.getToxicType().getName()}:
+
+
+ ${tv.getValue()}
+
+
+
+ #list>
+
+
+
+
+
+
+ <#assign document = vm.getDocument()>
+ <#assign searchId = "">
+ <#assign reduced = true>
+ <#include '*/search/components/documentCardContent.ftl' >
+
+
+
+
+
+ <#assign unique = (vm.getWikiModel().getUnique())!"none">
+ <#assign height = 500>
+ <#if unique != "none">
+
+ <#include "*/wiki/components/linkableSpace.ftl">
+
+ #if>
+
+
+
diff --git a/uce.portal/uce.common/src/main/java/org/texttechnologylab/config/HibernateConf.java b/uce.portal/uce.common/src/main/java/org/texttechnologylab/config/HibernateConf.java
index 1f1da164..a8cade36 100644
--- a/uce.portal/uce.common/src/main/java/org/texttechnologylab/config/HibernateConf.java
+++ b/uce.portal/uce.common/src/main/java/org/texttechnologylab/config/HibernateConf.java
@@ -13,14 +13,29 @@
import org.texttechnologylab.models.corpus.links.AnnotationToDocumentLink;
import org.texttechnologylab.models.corpus.links.DocumentLink;
import org.texttechnologylab.models.corpus.links.DocumentToAnnotationLink;
+import org.texttechnologylab.models.emotion.Emotion;
+import org.texttechnologylab.models.emotion.EmotionType;
+import org.texttechnologylab.models.emotion.EmotionValue;
import org.texttechnologylab.models.gbif.GbifOccurrence;
import org.texttechnologylab.models.imp.ImportLog;
import org.texttechnologylab.models.imp.UCEImport;
+import org.texttechnologylab.models.modelInfo.Model;
+import org.texttechnologylab.models.modelInfo.ModelCategory;
+import org.texttechnologylab.models.modelInfo.ModelVersion;
import org.texttechnologylab.models.negation.*;
+import org.texttechnologylab.models.sentiment.Sentiment;
+import org.texttechnologylab.models.sentiment.SentimentType;
+import org.texttechnologylab.models.sentiment.SentimentValue;
+import org.texttechnologylab.models.offensiveSpeech.OffensiveSpeech;
+import org.texttechnologylab.models.offensiveSpeech.OffensiveSpeechType;
+import org.texttechnologylab.models.offensiveSpeech.OffensiveSpeechValue;
import org.texttechnologylab.models.topic.TopicValueBase;
import org.texttechnologylab.models.topic.TopicValueBaseWithScore;
import org.texttechnologylab.models.topic.TopicWord;
import org.texttechnologylab.models.topic.UnifiedTopic;
+import org.texttechnologylab.models.toxic.Toxic;
+import org.texttechnologylab.models.toxic.ToxicType;
+import org.texttechnologylab.models.toxic.ToxicValue;
import java.util.HashMap;
@@ -80,6 +95,26 @@ public static SessionFactory buildSessionFactory() {
metadataSources.addAnnotatedClass(TopicWord.class);
metadataSources.addAnnotatedClass(TopicValueBase.class);
metadataSources.addAnnotatedClass(TopicValueBaseWithScore.class);
+ // sentiment
+ metadataSources.addAnnotatedClass(Sentiment.class);
+ metadataSources.addAnnotatedClass(SentimentType.class);
+ metadataSources.addAnnotatedClass(SentimentValue.class);
+ // offensive speech
+ metadataSources.addAnnotatedClass(OffensiveSpeech.class);
+ metadataSources.addAnnotatedClass(OffensiveSpeechValue.class);
+ metadataSources.addAnnotatedClass(OffensiveSpeechType.class);
+ // toxic
+ metadataSources.addAnnotatedClass(Toxic.class);
+ metadataSources.addAnnotatedClass(ToxicValue.class);
+ metadataSources.addAnnotatedClass(ToxicType.class);
+ // emotion
+ metadataSources.addAnnotatedClass(Emotion.class);
+ metadataSources.addAnnotatedClass(EmotionValue.class);
+ metadataSources.addAnnotatedClass(EmotionType.class);
+ // model info
+ metadataSources.addAnnotatedClass(Model.class);
+ metadataSources.addAnnotatedClass(ModelVersion.class);
+ metadataSources.addAnnotatedClass(ModelCategory.class);
metadataSources.addAnnotatedClass(DocumentTopThreeTopics.class);
var metadata = metadataSources.buildMetadata();
diff --git a/uce.portal/uce.common/src/main/java/org/texttechnologylab/config/corpusConfig/CorpusAnnotationConfig.java b/uce.portal/uce.common/src/main/java/org/texttechnologylab/config/corpusConfig/CorpusAnnotationConfig.java
index ec588bd3..33c133f4 100644
--- a/uce.portal/uce.common/src/main/java/org/texttechnologylab/config/corpusConfig/CorpusAnnotationConfig.java
+++ b/uce.portal/uce.common/src/main/java/org/texttechnologylab/config/corpusConfig/CorpusAnnotationConfig.java
@@ -24,6 +24,10 @@ public class CorpusAnnotationConfig {
private boolean scope;
private boolean xscope;
private boolean unifiedTopic;
+ private boolean sentiment;
+ private boolean offensiveSpeech;
+ private boolean emotion;
+ private boolean toxic;
public boolean isGeoNames() {
return geoNames;
@@ -202,5 +206,19 @@ public void setXscope(boolean xscope) {
public boolean isUnifiedTopic() {
return unifiedTopic;
}
+ public boolean isSentiment() {
+ return sentiment;
+ }
+
+ public boolean isOffensiveSpeech() {
+ return offensiveSpeech;
+ }
+ public boolean isEmotion() {
+ return emotion;
+ }
+
+ public boolean isToxic(){
+ return toxic;
+ }
}
diff --git a/uce.portal/uce.common/src/main/java/org/texttechnologylab/models/UIMAAnnotation.java b/uce.portal/uce.common/src/main/java/org/texttechnologylab/models/UIMAAnnotation.java
index 96f53ca3..467fddef 100644
--- a/uce.portal/uce.common/src/main/java/org/texttechnologylab/models/UIMAAnnotation.java
+++ b/uce.portal/uce.common/src/main/java/org/texttechnologylab/models/UIMAAnnotation.java
@@ -1,21 +1,22 @@
package org.texttechnologylab.models;
-import io.micrometer.common.lang.Nullable;
import lombok.Getter;
import lombok.Setter;
-import org.texttechnologylab.models.biofid.BiofidTaxon;
import org.texttechnologylab.models.corpus.*;
import org.texttechnologylab.models.corpus.links.AnnotationLink;
import org.texttechnologylab.models.corpus.links.AnnotationToDocumentLink;
-import org.texttechnologylab.models.corpus.links.DocumentLink;
import org.texttechnologylab.models.corpus.links.DocumentToAnnotationLink;
+import org.texttechnologylab.models.emotion.Emotion;
+import org.texttechnologylab.models.modelInfo.ModelVersion;
import org.texttechnologylab.models.negation.*;
+import org.texttechnologylab.models.offensiveSpeech.OffensiveSpeech;
+import org.texttechnologylab.models.sentiment.Sentiment;
import org.texttechnologylab.models.topic.UnifiedTopic;
+import org.texttechnologylab.models.toxic.Toxic;
import org.texttechnologylab.utils.StringUtils;
import javax.persistence.*;
import java.util.*;
-import java.util.concurrent.atomic.AtomicInteger;
@MappedSuperclass
public class UIMAAnnotation extends ModelBase implements Linkable {
@@ -51,6 +52,12 @@ public long getPrimaryDbIdentifier() {
@Column(name = "page_id", insertable = false, updatable = false)
private Long pageId;
+ @Getter
+ @Setter
+ @ManyToOne(fetch = FetchType.LAZY, optional = true)
+ @JoinColumn(name = "model_version_id", nullable = true)
+ private ModelVersion modelVersion;
+
public String getCoveredText() {
if (coveredText == null) {
return ""; // Or return an empty string "" if that's preferred
@@ -128,6 +135,18 @@ public String buildHTMLString(List