TIF_E41211364/app.py

48 lines
1.7 KiB
Python

from flask import Flask, request, render_template
import pickle
from preprocessing import preprocess_text # pastikan file preprocessing.py ada di folder yang sama
app = Flask(__name__)
with open('model_SVM.pkl', 'rb') as f:
model_SVM = pickle.load(f)
with open('model_NB.pkl', 'rb') as f:
model_NB = pickle.load(f)
def classify_text(processed_text):
result_svm = model_SVM.predict([processed_text])[0]
result_nb = model_NB.predict([processed_text])[0]
return result_svm, result_nb
@app.route('/', methods=['GET', 'POST'])
def index():
input_text = ''
processed_steps = {}
result_svm = ''
result_nb = ''
tfidf_dict = {}
if request.method == 'POST':
input_text = request.form['text']
processed_steps = preprocess_text(input_text)
# Gunakan hasil akhir (stemming) untuk prediksi dan TF-IDF
final_text = processed_steps.get("stemming", "")
result_svm, result_nb = classify_text(final_text)
# Dapatkan nilai TF-IDF dari vectorizer di pipeline model_SVM
vectorizer = model_SVM.named_steps['vectorizer']
tfidf_vector = vectorizer.transform([final_text])
dense = tfidf_vector.todense().tolist()[0]
features = vectorizer.get_feature_names_out()
tfidf_dict = {feature: round(value, 3) for feature, value in zip(features, dense) if value > 0}
return render_template('index.html',
input_text=input_text,
processed_steps=processed_steps,
result_svm=result_svm,
result_nb=result_nb,
tfidf_dict=tfidf_dict)
if __name__ == '__main__':
app.run(debug=True)