emotion-app / app.py
Harinipsp's picture
Update app.py
cf59149 verified
raw
history blame
No virus
2.5 kB
!pip install transformers
pip install googletrans==4.0.0-rc1
import streamlit as st
from transformers import pipeline
from googletrans import Translator
# Initialize translation and classification pipelines
translator = Translator()
emotion_classifier = pipeline("text-classification", model="arpanghoshal/EmoRoBERTa")
def classify_emotion(text, src_lang="auto", target_lang="en"):
"""
Classifies emotion in text after translating to English (if needed).
Args:
text: Input text sentence in any language.
src_lang: Source language of the text (default: "auto").
target_lang: Target language for translation (default: "en").
Returns:
A dictionary containing the predicted emotion and its probability.
"""
# Translate to English if necessary
if src_lang != target_lang:
translated_text = translator.translate(text, dest=target_lang).text
else:
translated_text = text
# Classify emotion using EmoRoBERTa
predictions = emotion_classifier(translated_text)
return predictions[0]
def split_sentences_with_conjunctions(paragraph):
"""
Splits a paragraph into sentences considering conjunctions and punctuation.
Args:
paragraph: The input paragraph as a string.
Returns:
A list of individual sentences.
"""
sentences = []
current_sentence = ""
conjunctions = ["and", "but", "or", "for", "nor", "so", "yet"] # Common conjunctions
for word in paragraph.split():
current_sentence += word + " "
if word.lower() in conjunctions or word.endswith(".") or word.endswith("?"):
sentences.append(current_sentence.strip())
current_sentence = ""
# Add any remaining sentence fragment
if current_sentence.strip():
sentences.append(current_sentence.strip())
return sentences
paragraph = st.text_area("Enter your input: ")
# Split paragraph into sentences considering conjunctions
sentences = split_sentences_with_conjunctions(paragraph)
# Classify emotion for each sentence
emotion_results = []
for sentence in sentences:
if sentence.strip(): # Check if sentence is not empty after stripping
emotion_result = classify_emotion(sentence)
emotion_results.append(emotion_result)
# Print emotions for each sentence
for sentence, emotion_result in zip(sentences, emotion_results):
print(f"Sentence: {sentence} | Emotion: {emotion_result['label']} ({emotion_result['score']:.2f})")