TIF_NGANJUK_E41222227/app.py

46 lines
1.1 KiB
Python

import pickle
from flask import Flask, request, jsonify, render_template
from flask_cors import CORS
# Load model
with open("model/model_knn.pkl", "rb") as f:
knn_model = pickle.load(f)
with open("model/vectorizer.pkl", "rb") as f:
vectorizer = pickle.load(f)
app = Flask(__name__, template_folder='templates')
CORS(app)
labels_map = {0: "Negatif", 1: "Positif"}
def predict_knn(text):
tfidf_input = vectorizer.transform([text])
pred_label = knn_model.predict(tfidf_input)[0]
probabilities = knn_model.predict_proba(tfidf_input)[0]
confidence = max(probabilities) * 100
return {
"label": labels_map.get(pred_label, str(pred_label)),
"confidence": round(confidence, 2)
}
@app.route("/")
def index():
return render_template("index.html")
@app.route("/predict", methods=["POST"])
def predict():
data = request.get_json(force=True)
text = data.get("text", "")
if not text:
return jsonify({"error": "No text provided"}), 400
result = predict_knn(text)
return jsonify(result)
if __name__ == "__main__":
app.run(host="0.0.0.0", port=7860)