File size: 2,284 Bytes
6d750bd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from flask import Flask, render_template, request
import numpy as np
import pickle
import gzip

# Load models and data
with gzip.open('Model/finaldf_compressed.gz', 'rb') as f:
    finaldf = pickle.load(f)

with gzip.open('Model/book_compressed.gz', 'rb') as f:
    book = pickle.load(f)

with gzip.open('Model/finalpopularitycompressed.gz', 'rb') as f:
    finalpopularity = pickle.load(f)

with gzip.open('Model/similarity_score_compressed.gz', 'rb') as f:
    similarityScore = pickle.load(f)

# Initialize Flask app
app = Flask(__name__, template_folder='templates', static_folder='static', static_url_path='/')

@app.route("/")
def start():
    return render_template(
        "home.html",
        bookName=list(finalpopularity["Book-Title"].values),
        Image=list(finalpopularity["Image-URL-M"].values),
        Isbn=list(finalpopularity["ISBN"].values),
        bookauthor=list(finalpopularity["Book-Author"].values),
        NoRating=list(finalpopularity["Book-Rating"].values),
    )

@app.route("/recommend")
def recommend():
    return render_template("recommend.html")

@app.route("/Userrecommend", methods=["POST"])
def Userrecommend():
    Userinput = request.form.get("Userinput")
    try:
        index = np.where(finaldf.index == Userinput)[0][0]
        similarBook = sorted(
            list(enumerate(similarityScore[index])),
            key=lambda x: x[1],
            reverse=True
        )[1:6]

        data = []
        for i in similarBook:
            item = []
            tempdf = book[book["Book-Title"] == finaldf.index[i[0]]]
            item.extend(list(tempdf.drop_duplicates("Book-Title")["Book-Title"].values))
            item.extend(list(tempdf.drop_duplicates("Book-Title")["Image-URL-M"].values))
            item.extend(list(tempdf.drop_duplicates("Book-Title")["Book-Author"].values))
            item.extend(list(tempdf.drop_duplicates("Book-Title")["ISBN"].values))        
            data.append(item)

        return render_template("recommend.html", data=data, user_input=Userinput)

    except IndexError:
        return render_template("recommend.html", error="User input not found!", user_input=Userinput)

if __name__ == "__main__":
    # Disable reloader to avoid threading issues
    app.run(debug=True, use_reloader=False)