model / app.py
dilpreet77's picture
Update app.py
f46ba78 verified
from flask import Flask, request, render_template
import joblib
import numpy as np
from scipy.sparse import hstack
app = Flask(__name__)
# Load saved objects
model = joblib.load('flavor_model.pkl')
tfidf = joblib.load('tfidf_vectorizer.pkl')
le_target = joblib.load('flavor_label_encoder.pkl')
encoders = joblib.load('column_encoders.pkl')
@app.route('/', methods=['GET', 'POST'])
def index():
prediction = None
if request.method == 'POST':
# Get form data
ingredients = request.form['ingredients'].lower()
ingredients = ''.join(c for c in ingredients if c.isalnum() or c.isspace()) # basic cleanup
diet = request.form['diet']
course = request.form['course']
region = request.form['region']
prep_time = request.form['prep_time']
cook_time = request.form['cook_time']
# Transform ingredients using TF-IDF
X_ingredients = tfidf.transform([ingredients])
# Encode categorical features
try:
diet_enc = encoders['diet'].transform([diet])[0]
except:
diet_enc = 0 # fallback or handle unknown categories
try:
course_enc = encoders['course'].transform([course])[0]
except:
course_enc = 0
try:
region_enc = encoders['region'].transform([region])[0]
except:
region_enc = 0
# Prepare numeric features, convert to float/int
try:
prep_time = float(prep_time)
except:
prep_time = 0.0
try:
cook_time = float(cook_time)
except:
cook_time = 0.0
# Stack all features
from scipy.sparse import csr_matrix
X_other = csr_matrix([[diet_enc, course_enc, region_enc, prep_time, cook_time]])
X_input = hstack([X_ingredients, X_other])
# Predict
pred_encoded = model.predict(X_input)[0]
prediction = le_target.inverse_transform([pred_encoded])[0]
return render_template('index.html', prediction=prediction)
if __name__ == '__main__':
app.run(debug=True)