diff --git a/EmotionDetection/__init__.py b/EmotionDetection/__init__.py new file mode 100644 index 000000000..d69073368 --- /dev/null +++ b/EmotionDetection/__init__.py @@ -0,0 +1 @@ +from . import emotion_detection \ No newline at end of file diff --git a/EmotionDetection/emotion_detection.py b/EmotionDetection/emotion_detection.py new file mode 100644 index 000000000..8930125b2 --- /dev/null +++ b/EmotionDetection/emotion_detection.py @@ -0,0 +1,30 @@ +import requests +import json +def emotion_detector(text_to_analyse): + url= 'https://sn-watson-emotion.labs.skills.network/v1/watson.runtime.nlp.v1/NlpService/EmotionPredict' + myobj = { "raw_document": { "text": text_to_analyse } } + header = {"grpc-metadata-mm-model-id": "emotion_aggregated-workflow_lang_en_stock"} + response = requests.post(url, json = myobj, headers=header) + + formatted_response = json.loads(response.text) + if response.status_code == 200: + emotions = formatted_response["emotionPredictions"][0]["emotion"] + dominant_emotion = max(emotions, key=emotions.get) + + anger = formatted_response['emotionPredictions'][0]['emotion']['anger'] + disgust = formatted_response['emotionPredictions'][0]['emotion']['disgust'] + fear = formatted_response['emotionPredictions'][0]['emotion']['fear'] + joy = formatted_response['emotionPredictions'][0]['emotion']['joy'] + sadness = formatted_response['emotionPredictions'][0]['emotion']['sadness'] + + return {'anger': anger, 'disgust': disgust, 'fear': fear, 'joy': joy, 'sadness': sadness,'dominant_emotion': dominant_emotion} + + elif response.status_code == 400: + formatted_response ={ + 'anger': None, + 'disgust': None, + 'fear': None, + 'joy': None, + 'sadness': None, + 'dominant_emotion': None} + return formatted_response diff --git a/server.py b/server.py new file mode 100644 index 000000000..356f7ebb4 --- /dev/null +++ b/server.py @@ -0,0 +1,42 @@ +""" +Emotion Detection Server + +This script defines a Flask-based server for performing emotion detection on user-provided text. + +Author:[Anvesh] +""" +from flask import Flask, render_template, request +from EmotionDetection.emotion_detection import emotion_detector +app = Flask("Emotion Detection") + +def run_emotion_detection(): + """ + Main function to run the Emotion Detection application. + """ + +@app.route("/emotionDetector") + +def sent_detector(): + """ + Analyze the user-provided text for emotions and return the result. + """ + text_to_detect = request.args.get('textToAnalyze') + formated_response = emotion_detector(text_to_detect) + if formated_response['dominant_emotion'] is None: + return "Invalid text! Please try again." + return ( + f"For the given statement, the system response is 'anger': {formated_response['anger']} " + f"'disgust': {formated_response['disgust']}, 'fear': {formated_response['fear']}, " + f"'joy': {formated_response['joy']} and 'sadness': {formated_response['sadness']}. " + f"The dominant emotion is {formated_response['dominant_emotion']}." + ) + +@app.route("/") +def render_index_page(): + ''' This function initiates the rendering of the main application + page over the Flask channel + ''' + return render_template('index.html') + +if __name__ == "__main__": + run_emotion_detection() diff --git a/test_emotion_detection.py b/test_emotion_detection.py new file mode 100644 index 000000000..911a37857 --- /dev/null +++ b/test_emotion_detection.py @@ -0,0 +1,25 @@ +from EmotionDetection.emotion_detection import emotion_detector +import unittest + +class TestEmotionDetection(unittest.TestCase): + def test_emotion_detection(self): + result_1 = emotion_detector("I am glad this happened") + self.assertEqual(result_1['dominant_emotion'],'joy') + + result_2 = emotion_detector("I am really mad about this") + self.assertEqual(result_2['dominant_emotion'],'anger') + + result_3 = emotion_detector("I feel disgusted just hearing about this") + self.assertEqual(result_3['dominant_emotion'],'disgust') + + result_4 = emotion_detector("I am so sad about this") + self.assertEqual(result_4['dominant_emotion'],'sadness') + + result_5 = emotion_detector("I am really afraid that this will happen") + self.assertEqual(result_5['dominant_emotion'],'fear') + +unittest.main() + + + +