diff --git a/src/main/java/org/texttechnologylab/project/gruppe_05_1/database/MongoDBHandler.java b/src/main/java/org/texttechnologylab/project/gruppe_05_1/database/MongoDBHandler.java index 9626f14..d77d99d 100644 --- a/src/main/java/org/texttechnologylab/project/gruppe_05_1/database/MongoDBHandler.java +++ b/src/main/java/org/texttechnologylab/project/gruppe_05_1/database/MongoDBHandler.java @@ -419,6 +419,15 @@ public class MongoDBHandler { return doc; } + public static Double getFieldAsDouble(Document doc, String fieldName) { + Object obj = doc.get(fieldName); + if (obj instanceof Double) return (Double) obj; + if (obj instanceof Integer) return ((Integer) obj).doubleValue(); + if (obj instanceof String) return Double.valueOf((String) obj); + Logger.error("Wert " + obj + " sollte Double sein, ist aber nicht"); + return (Double) obj; + } + /* * Weitere CRUD Operations * ======================= diff --git a/src/main/java/org/texttechnologylab/project/gruppe_05_1/domain/nlp/Sentiment.java b/src/main/java/org/texttechnologylab/project/gruppe_05_1/domain/nlp/Sentiment.java index ce29182..ab9398f 100644 --- a/src/main/java/org/texttechnologylab/project/gruppe_05_1/domain/nlp/Sentiment.java +++ b/src/main/java/org/texttechnologylab/project/gruppe_05_1/domain/nlp/Sentiment.java @@ -1,6 +1,7 @@ package org.texttechnologylab.project.gruppe_05_1.domain.nlp; import org.bson.Document; +import org.texttechnologylab.project.gruppe_05_1.database.MongoDBHandler; import java.util.ArrayList; import java.util.List; @@ -111,10 +112,10 @@ public class Sentiment { sentiments.add(new Sentiment( doc.getInteger("begin"), doc.getInteger("end"), - doc.getDouble("score"), - doc.getDouble("pos"), - doc.getDouble("neu"), - doc.getDouble("neg") + MongoDBHandler.getFieldAsDouble(doc, "score"), + MongoDBHandler.getFieldAsDouble(doc, "pos"), + MongoDBHandler.getFieldAsDouble(doc, "neu"), + MongoDBHandler.getFieldAsDouble(doc, "neg") )); } return sentiments; diff --git a/src/main/java/org/texttechnologylab/project/gruppe_05_1/rest/SpeechController.java b/src/main/java/org/texttechnologylab/project/gruppe_05_1/rest/SpeechController.java index 76745cb..f7f5f85 100644 --- a/src/main/java/org/texttechnologylab/project/gruppe_05_1/rest/SpeechController.java +++ b/src/main/java/org/texttechnologylab/project/gruppe_05_1/rest/SpeechController.java @@ -161,8 +161,13 @@ public class SpeechController { Sentiment overallSentiment = sentiments.get(0); attributes.put("overallSentiment", overallSentiment); sentiments.remove(0); + + // Sentiment-Icon + List sentimentIcons = calculateSentimentIcons(sentiments); + attributes.put("sentimentIcons", sentimentIcons); } else { attributes.put("overallSentiment", null); + attributes.put("sentimentIcons", null); } attributes.put("sentiments", sentiments); @@ -171,6 +176,29 @@ public class SpeechController { ctx.render("speech.ftl", attributes); } + + private static String POSITIVE_SENTIMENT= "fas fa-thumbs-up sentiment-positive"; // Alternativ: fas fa-smile positive + private static String NEGATIVE_SENTIMENT= "fas fa-thumbs-down sentiment-negative"; // Alternativ: fas fa-frown negative + private static String NEUTRAL_SENTIMENT = "fas fa-meh sentiment-neutral"; // Alternativ: fas fa-circle neutral + + /** + * Ordne einem Satz ein Sentiment-Icon + * @param sentiments + * @return Icon Name (als Font Awesome Icon) + */ + private static List calculateSentimentIcons(List sentiments) { + double threshold = 0.15; + List iconNames = new ArrayList<>(); + for (Sentiment s: sentiments) { + if (s.getPositive() - s.getNegative() > threshold) { + iconNames.add(POSITIVE_SENTIMENT); + } else if (s.getNegative() - s.getPositive() > threshold) { + iconNames.add(NEGATIVE_SENTIMENT); + } else iconNames.add(NEUTRAL_SENTIMENT); + } + return iconNames; + } + @OpenApi( summary = "Liste alle Reden (Filtern ist möglich)", description = "Liste alle Reden. Man kann nach Freitext (MdB Name, Partei/Fraktion) oder nach Thema (Topic) filtern", diff --git a/src/main/resources/templates/speech.ftl b/src/main/resources/templates/speech.ftl index 8be35be..ee58c7c 100644 --- a/src/main/resources/templates/speech.ftl +++ b/src/main/resources/templates/speech.ftl @@ -49,6 +49,10 @@
<#list s.content as c> + <#if sentimentIcons??> + <#assign index = c?index> + <#assign sentimentIcon = sentimentIcons[index]> + <#include "speechContent.ftl"> diff --git a/src/main/resources/templates/speechContent.ftl b/src/main/resources/templates/speechContent.ftl index 752d416..b55b375 100644 --- a/src/main/resources/templates/speechContent.ftl +++ b/src/main/resources/templates/speechContent.ftl @@ -1,7 +1,9 @@ <#if c.type == 'SPEAKER'> +Rednerin/Redner: ${c.content} <#elseif c.type == 'LINE'> ${c.content} <#elseif c.type == 'COMMENT'> Kommentar: ${c.content} +<#if sentimentIcon??>