sree4411 commited on
Commit
311a5d9
Β·
verified Β·
1 Parent(s): 3cdedcd

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +25 -23
app.py CHANGED
@@ -1,21 +1,16 @@
1
- import pickle
2
  import streamlit as st
3
- import os
4
  import numpy as np
5
 
6
- # πŸ’‘ Define the custom tokenizer exactly as used during training
7
- def custom_tokenizer(text):
8
- # Modify this function to match your original tokenizer logic
9
- return text.lower().split()
10
-
11
-
12
 
13
- # πŸ”ƒ Load model files
14
  try:
15
  with open("vectorizer.pkl", "rb") as f:
16
  vectorizer = pickle.load(f)
17
 
18
- with open("model (2).pkl", "rb") as f:
19
  model = pickle.load(f)
20
 
21
  with open("binarizer.pkl", "rb") as f:
@@ -25,33 +20,40 @@ except Exception as e:
25
  st.error(f"❌ Error loading model files: {str(e)}")
26
  st.stop()
27
 
28
- # 🧠 Prediction function
29
- def predict_tags(title, description):
30
  try:
31
  if not title.strip() or not description.strip():
32
  return "⚠️ Please enter both title and description."
33
 
34
  input_text = title + " " + description
35
  input_vector = vectorizer.transform([input_text])
36
- prediction = model.predict(input_vector)
37
- predicted_tags = mlb.inverse_transform(prediction)
38
- st.write(predicted_tags)
 
 
 
 
 
 
39
 
40
  if predicted_tags and predicted_tags[0]:
41
- return "βœ… Predicted Tags: " + ", ".join(predicted_tags[0])
42
  else:
43
- return "ℹ️ No tags predicted. Try refining your question."
44
 
45
  except Exception as e:
46
  return f"❌ Error during prediction: {str(e)}"
47
 
48
  # πŸš€ Streamlit UI
49
- st.title("πŸ”–:red[ Stack Overflow Tags Predictor]")
50
- st.markdown(":blue[Enter a question title and description to predict relevant tags.]")
51
 
52
- title = st.text_input("πŸ“Œ Enter Question Title")
53
- description = st.text_area("πŸ“ Enter Question Description", height=150)
 
54
 
55
  if st.button("Predict Tags"):
56
- result = predict_tags(title, description)
57
- st.markdown(result)
 
 
1
  import streamlit as st
2
+ import pickle
3
  import numpy as np
4
 
5
+ # βš™οΈ Set Streamlit Page Config (this MUST be first)
6
+ st.set_page_config(page_title="Multi-Tag Stack Overflow Predictor", page_icon="🧠")
 
 
 
 
7
 
8
+ # πŸ§ͺ Load Model Files
9
  try:
10
  with open("vectorizer.pkl", "rb") as f:
11
  vectorizer = pickle.load(f)
12
 
13
+ with open("model.pkl", "rb") as f:
14
  model = pickle.load(f)
15
 
16
  with open("binarizer.pkl", "rb") as f:
 
20
  st.error(f"❌ Error loading model files: {str(e)}")
21
  st.stop()
22
 
23
+ # 🧠 Prediction Function (Multi-tag with Threshold)
24
+ def predict_tags(title, description, threshold=0.3):
25
  try:
26
  if not title.strip() or not description.strip():
27
  return "⚠️ Please enter both title and description."
28
 
29
  input_text = title + " " + description
30
  input_vector = vectorizer.transform([input_text])
31
+
32
+ # Predict probabilities
33
+ probas = model.predict_proba(input_vector)
34
+
35
+ # Apply threshold to get binary predictions
36
+ multi_pred = (probas >= threshold).astype(int)
37
+
38
+ # Convert binary predictions to tags
39
+ predicted_tags = mlb.inverse_transform(multi_pred)
40
 
41
  if predicted_tags and predicted_tags[0]:
42
+ return "βœ… **Predicted Tags:** " + ", ".join(predicted_tags[0])
43
  else:
44
+ return "ℹ️ No tags predicted. Try lowering the threshold or refining your input."
45
 
46
  except Exception as e:
47
  return f"❌ Error during prediction: {str(e)}"
48
 
49
  # πŸš€ Streamlit UI
50
+ st.title("πŸ”– Stack Overflow Multi-Tag Predictor")
51
+ st.markdown("Enter a question title and description to predict relevant tags using ML.")
52
 
53
+ title = st.text_input("πŸ“Œ Question Title")
54
+ description = st.text_area("πŸ“ Question Description", height=150)
55
+ threshold = st.slider("🎯 Prediction Threshold", 0.1, 0.9, 0.3, step=0.05)
56
 
57
  if st.button("Predict Tags"):
58
+ result = predict_tags(title, description, threshold)
59
+ st.markdown(result)