Stack_over_flow / app.py
santosh0223's picture
Update app.py
1eb9f90 verified
Raw
History Blame Contribute Delete
1.9 kB
import streamlit as st
import pickle
import numpy as np
# ----------------------------
# Page Config
# ----------------------------
st.set_page_config(
page_title="StackOverflow Tag Predictor",
page_icon="🧠",
layout="centered"
)
# ----------------------------
# Load Everything
# ----------------------------
@st.cache_resource
def load_files():
model = pickle.load(open("model.pkl", "rb"))
vectorizer = pickle.load(open("vectorizer.pkl", "rb"))
mlb = pickle.load(open("mlb.pkl", "rb"))
return model, vectorizer, mlb
model, vectorizer, mlb = load_files()
# ----------------------------
# UI
# ----------------------------
st.title("🧠 StackOverflow Tag Predictor")
st.write("Enter your programming question to predict relevant tags.")
user_input = st.text_area(
"✍️ Enter your question:",
height=150,
placeholder="Example: How to merge two pandas dataframes?"
)
# ----------------------------
# Prediction
# ----------------------------
if st.button("πŸš€ Predict Tags"):
if user_input.strip() == "":
st.warning("Please enter a question.")
else:
try:
# Transform text
X = vectorizer.transform([user_input])
# Predict binary output
prediction = model.predict(X)
# Convert binary β†’ actual tag names
predicted_tags = mlb.inverse_transform(prediction)
if predicted_tags and len(predicted_tags[0]) > 0:
st.success("### βœ… Predicted Tags:")
for tag in predicted_tags[0]:
st.write(f"- {tag}")
else:
st.warning("No tags predicted. Try a more detailed question.")
except Exception as e:
st.error(f"Error: {e}")
# ----------------------------
# Footer
# ----------------------------
st.markdown("---")
st.caption("Built with ❀️")