Spaces:
Sleeping
Sleeping
| 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') | |
| 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) | |