Skip to content
Snippets Groups Projects
Commit c1b63f0d authored by sacha's avatar sacha
Browse files

Ecriture de recommendation + tierces

parent 7267e0d0
No related branches found
No related tags found
No related merge requests found
......@@ -8,5 +8,4 @@ class User{
this.movies.append(movieSeen);
}
}
\ No newline at end of file
/**
* Cette fonction selectionne les 3 meilleurs movies d'une liste de film.
* Cette fonction selectionne les 3 meilleurs films d'une liste de film.
*
* @param {Movie[]} movies - Liste de film.
* @returns {Movie[]} - La liste des 3 films.
......@@ -24,4 +24,97 @@ function top3(movies) {
return highestNotes;
}
/**
* Cette fonction selectionne les 3 meilleurs films pour un utilisateur.
*
* @param {string} user_login - Login de l'utilisateur.
* @returns {Movie[]} - La liste des 3 films.
*/
function recommendationForUser(user_login) {
let person = get_user(user_login);
let fav_styles = []; //styles des films présents dans les films aimés par l'utilisateur
let fav_authors = []; //auteurs récurents dans les films aimés par l'utilisateur : moyenne (auteur * note du film)
let fav_actors = []; //acteurs récurents dans les films aimés par l'utilisateur : moyenne (acteur * note du film (* %temps écran))
//let fav_duration;
let seen = person.movies;
let authors = getAllAuthors(seen).slice(0,3);
for (let i = 0; i < authors.length; i++) {
fav_authors = authors[i][0]; //recuperer seulement l'auteur, pas le reste
}
}
/**
* trier une matrice par l'indice 1, puis par l'indice 2, puis par l'indice 0.
*
* @param {[string, Number, Number]} a - ligne d'une matrice
* @param {[string, Number, Number]} b - ligne d'une matrice
* @returns {Number} - 1 si a est plus grand, 0 si a=b, -1 si b est plus grand.
*/
function comparerLignes(a, b) {
// trier par le nombre d'apparition de l'auteur dans la liste de film vus (int)
if (a[1] < b[1]) return -1;
if (a[1] > b[1]) return 1;
// Si le nombre d'apparition est le même, trier par la moyenne de notes des films de l'auteur (float)
if (a[2] < b[2]) return -1;
if (a[2] > b[2]) return 1;
// Si la moyenne est la même, trier par le nom de l'auteur (string)
if (a[0] < b[0]) return -1;
if (a[0] > b[0]) return 1;
// Les lignes sont égales
alert("doublon d'auteur !!");
return 0;
}
/**
* renvoie une liste d'auteurs, avec leur nombre d'apparition dans la liste des films vus par un utilisateur, puis leur note moyenne
*
* @param {Movie[]} movies - Liste de film vus par un utilisateur.
* @param {string(Movie)} recupElement - Fonction qui recupere un element d'un film (pour generaliser allAutors à allElement).
* @returns {[[string, Number, Number]]} - La liste des auteurs.
*/
function getAllAuthors(movies, recupElement){
let authors = [[]];
//premier indice = couple auteur/nombre d'apparition/moyenne notes films, 2e indice: 0 auteur, 1 nbr apparition, 2 mpyenne films
for (let i = 0; i < seen.length; i++) {
let j = 0;
let found = false;
while(j < authors.length && !found){
if (authors[j][0] == seen[i].author) {
found = true;
authors[j][1] += 1;
authors[j][2] += seen[i].note;
}
j++;
}
if(!found){
authors.append([seen[i].author, 1, seen[i].note]);
}
}
for (let i = 0; i < authors.length; i++) {
authors[i][2] /= authors[i][1];
}
authors.sort(comparerLignes);
return authors;
}
function getAuthor(movie){
return movie.author;
}
function getActors(movie){
return movie.actors;
}
function getStyles(movie){
return movie.styles;
}
\ No newline at end of file
......@@ -100,4 +100,17 @@ function getFilmsByAuthor(author, isOrdered = false, length = -1){
function getFilmsByStyle(style, isOrdered = false, length = -1){
return true;
}
/**
* Cette fonction récupere un utilisateur avec son login.
*
* @param {string} login - login de l'utilisateur.
* @returns {User} - L'utilisateur.
*/
function get_user(login){
return true;
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment