Spaces:
Build error
Build error
| 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") | |