Durganihantri's picture
Create app.py
6d53774 verified
raw
history blame
2.63 kB
import streamlit as st
import pandas as pd
import nltk
from textblob import TextBlob
import matplotlib.pyplot as plt
from wordcloud import WordCloud
# Ensure necessary NLTK datasets are downloaded
nltk.download('punkt')
# Function to analyze sentiment
def analyze_sentiment(text):
analysis = TextBlob(text)
return analysis.sentiment.polarity # Returns sentiment score (-1 to 1)
# Function to categorize microaggressions (basic NLP)
def categorize_microaggression(text):
keywords = {
"Microinvalidation": ["you're overreacting", "stop being so sensitive", "I don’t see color"],
"Microinsult": ["you’re so articulate", "where are you really from", "you must be good at math"],
"Microassault": ["racial slur", "explicit insult", "offensive joke"]
}
for category, phrases in keywords.items():
for phrase in phrases:
if phrase in text.lower():
return category
return "Uncategorized"
# Streamlit UI
st.title("MicroAggression Insight Tool")
st.write("Analyze, categorize, and visualize reported microaggressions.")
# Collect user input
user_input = st.text_area("Enter a microaggression example:")
if st.button("Analyze"):
if user_input:
sentiment_score = analyze_sentiment(user_input)
category = categorize_microaggression(user_input)
# Display results
st.write(f"**Predicted Category:** {category}")
st.write(f"**Sentiment Score:** {sentiment_score:.2f} (Negative: -1, Neutral: 0, Positive: 1)")
# Store input in a dataframe
df = pd.DataFrame({"Text": [user_input], "Category": [category], "Sentiment": [sentiment_score]})
# Save locally (optional)
df.to_csv("data.csv", mode='a', header=False, index=False)
# Load existing data
try:
data = pd.read_csv("data.csv", names=["Text", "Category", "Sentiment"])
if not data.empty:
st.subheader("Data Insights")
# Show category distribution
st.write("### Microaggression Category Distribution")
category_counts = data["Category"].value_counts()
fig, ax = plt.subplots()
category_counts.plot(kind='bar', ax=ax)
st.pyplot(fig)
# Generate a word cloud
st.write("### Common Words in Microaggressions")
wordcloud = WordCloud(width=800, height=400, background_color="white").generate(" ".join(data["Text"]))
fig, ax = plt.subplots()
ax.imshow(wordcloud, interpolation="bilinear")
ax.axis("off")
st.pyplot(fig)
except FileNotFoundError:
st.write("No data available yet.")