NEEHARA commited on
Commit
2f60bf7
·
verified ·
1 Parent(s): 0760ea1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +50 -50
app.py CHANGED
@@ -1,50 +1,50 @@
1
- from flask import Flask, request, jsonify
2
- from flask_cors import CORS
3
- import pandas as pd
4
- from sklearn.feature_extraction.text import TfidfVectorizer
5
- from sklearn.metrics.pairwise import cosine_similarity
6
-
7
- app = Flask(__name__)
8
- CORS(app)
9
-
10
- # Load and clean the dataset
11
- df = pd.read_csv("cleaned.csv")
12
- df = df[df["Clean_Genre"].notna()].reset_index(drop=True)
13
-
14
- # Vectorize genres
15
- tfidf = TfidfVectorizer(stop_words='english')
16
- genre_vectors = tfidf.fit_transform(df['Clean_Genre'])
17
-
18
- @app.route('/recommend', methods=['POST'])
19
- def recommend():
20
- data = request.get_json()
21
- user_input_genre = data.get('genre', '').strip()
22
-
23
- if not user_input_genre:
24
- return jsonify({"error": "Genre input is empty."}), 400
25
-
26
- # Transform user input to vector
27
- input_vec = tfidf.transform([user_input_genre])
28
- similarity_scores = cosine_similarity(input_vec, genre_vectors).flatten()
29
-
30
- # Get top 20 matches by similarity
31
- top_indices = similarity_scores.argsort()[-20:][::-1]
32
-
33
- # Get matching books and filter by rating > 0
34
- recommended_books = df.iloc[top_indices].copy()
35
- recommended_books = recommended_books[recommended_books['average_rating'] > 0]
36
-
37
- # Sort again by rating (optional)
38
- recommended_books = recommended_books.sort_values(by='average_rating', ascending=False)
39
-
40
- # Limit to top 10
41
- top_books = recommended_books[['Title', 'Author', 'average_rating', 'Clean_Genre']].head(10)
42
-
43
- # Fallback if no good books found
44
- if top_books.empty:
45
- return jsonify({"message": "No high-rated books found for this genre."}), 200
46
-
47
- return jsonify(top_books.to_dict(orient='records'))
48
-
49
- if __name__ == '__main__':
50
- app.run(debug=True)
 
1
+ from flask import Flask, request, jsonify
2
+ from flask_cors import CORS
3
+ import pandas as pd
4
+ from sklearn.feature_extraction.text import TfidfVectorizer
5
+ from sklearn.metrics.pairwise import cosine_similarity
6
+
7
+ app = Flask(__name__)
8
+ CORS(app)
9
+
10
+ # Load and clean the dataset 2
11
+ df = pd.read_csv("cleaned.csv")
12
+ df = df[df["Clean_Genre"].notna()].reset_index(drop=True)
13
+
14
+ # Vectorize genres
15
+ tfidf = TfidfVectorizer(stop_words='english')
16
+ genre_vectors = tfidf.fit_transform(df['Clean_Genre'])
17
+
18
+ @app.route('/recommend', methods=['POST'])
19
+ def recommend():
20
+ data = request.get_json()
21
+ user_input_genre = data.get('genre', '').strip()
22
+
23
+ if not user_input_genre:
24
+ return jsonify({"error": "Genre input is empty."}), 400
25
+
26
+ # Transform user input to vector
27
+ input_vec = tfidf.transform([user_input_genre])
28
+ similarity_scores = cosine_similarity(input_vec, genre_vectors).flatten()
29
+
30
+ # Get top 20 matches by similarity
31
+ top_indices = similarity_scores.argsort()[-20:][::-1]
32
+
33
+ # Get matching books and filter by rating > 0
34
+ recommended_books = df.iloc[top_indices].copy()
35
+ recommended_books = recommended_books[recommended_books['average_rating'] > 0]
36
+
37
+ # Sort again by rating (optional)
38
+ recommended_books = recommended_books.sort_values(by='average_rating', ascending=False)
39
+
40
+ # Limit to top 10
41
+ top_books = recommended_books[['Title', 'Author', 'average_rating', 'Clean_Genre']].head(10)
42
+
43
+ # Fallback if no good books found
44
+ if top_books.empty:
45
+ return jsonify({"message": "No high-rated books found for this genre."}), 200
46
+
47
+ return jsonify(top_books.to_dict(orient='records'))
48
+
49
+ if __name__ == '__main__':
50
+ app.run(debug=True)