import streamlit as st import pickle import string import nltk from nltk.corpus import stopwords from nltk.stem.porter import PorterStemmer # 🧠 Download required NLTK resources only once try: nltk.data.find('tokenizers/punkt') except LookupError: nltk.download('punkt') try: nltk.data.find('corpora/stopwords') except LookupError: nltk.download('stopwords') # 🔤 Initialize stemmer ps = PorterStemmer() # 🔍 Preprocessing function def transform_text(text): text = text.lower() text = nltk.word_tokenize(text) y = [] for word in text: if word.isalnum(): y.append(word) text = y[:] y.clear() for word in text: if word not in stopwords.words('english') and word not in string.punctuation: y.append(ps.stem(word)) return " ".join(y) # 📦 Load model and vectorizer tfidf = pickle.load(open('vectorizer.pkl', 'rb')) model = pickle.load(open('model.pkl', 'rb')) # 💬 Streamlit UI st.title("📩 SMS Spam Classifier") input_sms = st.text_area("Enter the message") if st.button('Predict'): # 1. Preprocess transformed_sms = transform_text(input_sms) # 2. Vectorize vector_input = tfidf.transform([transformed_sms]) # 3. Predict result = model.predict(vector_input)[0] # 4. Show result if result == 1: st.error("🚫 Spam") else: st.success("✅ Not Spam")