46 lines
1.1 KiB
Python
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) |