48 lines
1.7 KiB
Python
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)
|