13nishit's picture
Update app.py
b8da075 verified
from flask import Flask, render_template, request
import pickle
import string
import nltk
from nltk.corpus import stopwords
from nltk.stem.porter import PorterStemmer
app = Flask(__name__)
# Downloading NLTK libraries
nltk.download('punkt')
nltk.download('stopwords')
ps = PorterStemmer()
def transform_text(text):
text = text.lower()
text = nltk.word_tokenize(text)
y = []
for i in text:
if i.isalnum():
y.append(i)
text = y[:]
y.clear()
for i in text:
if i not in stopwords.words('english') and i not in string.punctuation:
y.append(i)
text = y[:]
y.clear()
for i in text:
y.append(ps.stem(i))
return " ".join(y)
# Load the TF-IDF vectorizer and the model
with open('vectorizer.pkl', 'rb') as f:
tfidf = pickle.load(f)
with open('model.pkl', 'rb') as f:
model = pickle.load(f)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/predict', methods=['POST'])
def predict():
if request.method == 'POST':
input_sms = request.form['sms']
# Preprocess the input
transform_sms = transform_text(input_sms)
# Vectorize the input
vector_input = tfidf.transform([transform_sms])
# Predict
result = model.predict(vector_input)[0]
# Convert result to string
if result == 1:
result_text = "SPAM"
else:
result_text = "NOT SPAM"
# Return prediction result
return render_template('result.html', result=result_text)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080, debug=True )