from matrix_factorization_algo import MatrixFactorizationAlgo
from DataHandler import DataHandler

from knn_algo import knn
from hybrid_algo_weighted import HybridAlgoWeighted

# from Evaluator import Evaluator
#load dataset
dataprocessor = DataHandler()
evaluationData = dataprocessor.getEvaluation()
rankings = dataprocessor.getRank()
evaluator = Evaluator()

#use random as our basline here
Random = NormalPredictor()
evaluator.Add_Algo(Random, "Random")

# add knn algos
knngenerator = knn()
knn_algo_dict = knngenerator.generate_knn(evaluationData)
for key in knn_algo_dict:
    evaluator.Add_Algo(knn_algo_dict[key], key)

# adding MF algos
mf_algo = MatrixFactorizationAlgo()
mf_algo_dict = mf_algo.generate_algorithms(evaluationData)
for key in mf_algo_dict:
    evaluator.Add_Algo(mf_algo_dict[key], key)

# since KNN_bl has high novelty and diversity, SVD++ has lower novelty and diversity,
# we can combine the KNN and SVD approaches in a way based on how much a user likes