from http import HTTPStatus from backend.models import db from flask import json, render_template, request, redirect, Blueprint, Response from ..models.UserCityModel import UserCityModel from ..models.DestinationModel import DestinationModel import sys import os sys.path.append(os.path.dirname(os.path.abspath(__file__))+ "/../../src/") from algorithms.CosineSimilarityWithSimilarityCoefficient import CosineSimilarityWithSimilarityCoefficient from algorithms.CosineSimilarity import CosineSimilarity from algorithms.CollaborativeFiltering import CollaborativeFiltering from algorithms.RandomSimilarity import RandomSimilarity recommendationsBlueprint = Blueprint( 'recommendations', __name__, url_prefix='') @recommendationsBlueprint.route('/recommend/results', methods=['POST']) def recommendationsResults(): cities = request.form.getlist("city_name") result = DestinationModel.query.all() available_cities = [str(r).split(" ")[1].split(">")[0] for r in result] for c in cities: if c not in available_cities: cities.remove(c) cosine = CosineSimilarity() cosine_sim = CosineSimilarityWithSimilarityCoefficient() collab = CollaborativeFiltering() random = RandomSimilarity() if len(cities) != 0: recommendations = { "Cos Raw data": cosine.similarity_on_raw_data(cities), "Cos Imputed data": cosine.similarity_on_imputed_data(cities), "Cos Binned features": cosine.similarity_on_binned_data(cities), "SVD": collab.similarity_with_SVD(cities), "Random": random.random_similarity(cities), "CosSim Raw data": cosine_sim.similarity_on_raw_data(cities), "CosSim Imputed data": cosine_sim.similarity_on_imputed_data(cities), "CosSim Binned features": cosine_sim.similarity_on_binned_data(cities), } else: recommendations = {} return render_template("recommend.html", results=recommendations, cities=cities)