Toxic_model_NLP / src /streamlit_app.py
jalesummak's picture
Update src/streamlit_app.py
5b7b5e5 verified
Raw
History Blame Contribute Delete
1.83 kB
import os
import joblib
import pandas as pd
import streamlit as st
st.set_page_config(
page_title="Toxic Comment Classifier",
page_icon="☣️",
layout="centered"
)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
MODEL_PATH = os.path.join(BASE_DIR, "toxic_model.pkl")
VECTORIZER_PATH = os.path.join(BASE_DIR, "toxic_vectorizer.pkl")
COLUMNS_PATH = os.path.join(BASE_DIR, "toxic_columns.pkl")
@st.cache_resource
def load_artifacts():
model = joblib.load(MODEL_PATH)
vectorizer = joblib.load(VECTORIZER_PATH)
label_columns = joblib.load(COLUMNS_PATH)
return model, vectorizer, label_columns
model, vectorizer, label_columns = load_artifacts()
st.title("☣️ Toxic Comment Classifier")
st.write(
"Enter a comment and predict whether it belongs to one or more toxicity categories."
)
comment = st.text_area(
"Comment Text",
placeholder="Type or paste a comment here..."
)
if st.button("Predict"):
if not comment.strip():
st.warning("Please enter a comment.")
else:
text_vec = vectorizer.transform([comment])
pred = model.predict(text_vec)[0]
result_df = pd.DataFrame({
"Label": label_columns,
"Prediction": pred
})
st.subheader("Prediction Results")
st.dataframe(result_df, use_container_width=True)
positive_labels = result_df.loc[result_df["Prediction"] == 1, "Label"].tolist()
if positive_labels:
st.error("Detected labels: " + ", ".join(positive_labels))
else:
st.success("No toxic label detected.")
st.subheader("Quick Summary")
st.write(
{
"toxic_labels_count": int(result_df["Prediction"].sum()),
"labels_detected": positive_labels
}
)