import streamlit as st import pandas as pd from sklearn.model_selection import train_test_split from sklearn.feature_extraction.text import CountVectorizer from sklearn.naive_bayes import MultinomialNB from sklearn.metrics import accuracy_score, classification_report # Load the dataset @st.cache def load_data(): df = pd.read_csv("tweet_emotions.csv") return df df = load_data() # Train a Naive Bayes classifier @st.cache def train_classifier(data): vectorizer = CountVectorizer() X = vectorizer.fit_transform(data['content']) y = data['sentiment'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) naive_bayes_model = MultinomialNB() naive_bayes_model.fit(X_train, y_train) return naive_bayes_model, vectorizer, X_test, y_test naive_bayes_model, vectorizer, X_test, y_test = train_classifier(df) # Streamlit UI st.title("Emotion Detection App") # User input tweet = st.text_area("Enter a tweet:") # Emotion detection if st.button("Detect Emotion"): tweet_vectorized = vectorizer.transform([tweet]) prediction = naive_bayes_model.predict(tweet_vectorized) st.success(f"Predicted Emotion: {prediction[0]}") # Display the dataset st.subheader("Dataset Preview:") st.write(df.head()) # Model evaluation st.subheader("Model Evaluation:") y_pred = naive_bayes_model.predict(X_test) accuracy = accuracy_score(y_test, y_pred) classification_rep = classification_report(y_test, y_pred) st.write(f"Accuracy: {accuracy:.4f}") st.write("Classification Report:\n", classification_rep)