File size: 2,107 Bytes
eecfebc
 
 
 
 
 
 
 
f46ba78
 
 
 
eecfebc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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)