pravaah / sentiment.py
Prathamesh Sutar
Initial deployment of Pravaah Ocean Hazard Detection System
49e67a8
from transformers import pipeline
_emotion_classifier = None
def get_emotion_classifier():
"""
Load (lazily) and return a text-classification pipeline for emotions.
Using GoEmotions for strong multilingual-ish coverage via RoBERTa base.
"""
global _emotion_classifier
if _emotion_classifier is not None:
return _emotion_classifier
model_name = "SamLowe/roberta-base-go_emotions"
_emotion_classifier = pipeline("text-classification", model=model_name, framework="pt")
return _emotion_classifier
def classify_emotion_text(text):
"""
Classify a single text into one of: panic | calm | confusion | neutral | unknown
Returns dict: {label, score}
"""
if not text or not text.strip():
return {"label": "unknown", "score": 0.0}
emotion_to_category = {
'fear': 'panic', 'nervousness': 'panic', 'remorse': 'panic',
'joy': 'calm', 'love': 'calm', 'admiration': 'calm', 'approval': 'calm',
'caring': 'calm', 'excitement': 'calm', 'gratitude': 'calm', 'optimism': 'calm',
'relief': 'calm', 'pride': 'calm',
'confusion': 'confusion', 'curiosity': 'confusion', 'realization': 'confusion',
'neutral': 'neutral',
'anger': 'unknown', 'annoyance': 'unknown', 'disappointment': 'unknown',
'disapproval': 'unknown', 'disgust': 'unknown', 'embarrassment': 'unknown',
'grief': 'unknown', 'sadness': 'unknown', 'surprise': 'unknown', 'desire': 'unknown'
}
classifier = get_emotion_classifier()
try:
result = classifier(text)
top_label = result[0]['label']
top_score = float(result[0]['score'])
except Exception:
return {"label": "unknown", "score": 0.0}
mapped = emotion_to_category.get(top_label, 'unknown')
return {"label": mapped, "score": top_score}
if __name__ == "__main__":
# Simple demo
examples = [
"Cyclone warning issued; please evacuate immediately.",
"Beautiful calm sea today.",
"Why is the alert not clear?",
"Meeting at 3 PM.",
]
clf = get_emotion_classifier()
for ex in examples:
print(ex, "->", classify_emotion_text(ex))