コード例 #1
0
        public void FilmIdPropertyOk()
        {
            clsFilmRecommendation aFilmRecommendation = new clsFilmRecommendation();
            Int32 filmId = 1;

            aFilmRecommendation.FilmId = filmId;
            Assert.AreEqual(aFilmRecommendation.FilmId, filmId);
        }
コード例 #2
0
        public void UserIdPropertyOk()
        {
            clsFilmRecommendation aFilmRecommendation = new clsFilmRecommendation();
            Int32 userId = 1;

            aFilmRecommendation.UserId = userId;
            Assert.AreEqual(aFilmRecommendation.UserId, userId);
        }
コード例 #3
0
        public void FindMethodOk()
        {
            bool found;
            clsFilmRecommendation aFilmRecommendation = new clsFilmRecommendation();
            Int32 userId = 1;
            Int32 filmId = 53996;

            found = aFilmRecommendation.Find(userId, filmId);
            Assert.IsTrue(found);
        }
コード例 #4
0
        public void ThisFilmRecommendationPropertyOk()
        {
            clsFilmRecommendationCollection FilmRecommendations = new clsFilmRecommendationCollection();
            clsFilmRecommendation           aFilmRecommendation = new clsFilmRecommendation();

            aFilmRecommendation.UserId = 1;
            aFilmRecommendation.FilmId = 6;
            FilmRecommendations.ThisFilmRecommendation = aFilmRecommendation;
            Assert.AreEqual(FilmRecommendations.ThisFilmRecommendation, aFilmRecommendation);
        }
コード例 #5
0
        public void AddMethodOk()
        {
            clsFilmRecommendationCollection AllFilmRecommendations = new clsFilmRecommendationCollection();
            clsFilmRecommendation           TestItem = new clsFilmRecommendation();

            TestItem.UserId = 1;
            TestItem.FilmId = 889;
            AllFilmRecommendations.ThisFilmRecommendation = TestItem;
            AllFilmRecommendations.Add();
            AllFilmRecommendations.ThisFilmRecommendation.Find(TestItem.UserId, TestItem.FilmId);
            Assert.AreEqual(AllFilmRecommendations.ThisFilmRecommendation, TestItem);
        }
コード例 #6
0
        public void CountMatchesList()
        {
            clsFilmRecommendationCollection FilmRecommendations = new clsFilmRecommendationCollection();
            List <clsFilmRecommendation>    TestList            = new List <clsFilmRecommendation>();
            clsFilmRecommendation           TestItem            = new clsFilmRecommendation();

            TestItem.UserId = 1;
            TestItem.FilmId = 1;
            TestList.Add(TestItem);
            FilmRecommendations.AllFilmRecommendations = TestList;
            Assert.AreEqual(FilmRecommendations.Count, TestList.Count);
        }
コード例 #7
0
        public void DeleteMethod()
        {
            clsFilmRecommendationCollection AllFilmRecommendations = new clsFilmRecommendationCollection();
            clsFilmRecommendation           TestItem = new clsFilmRecommendation();

            TestItem.UserId = 1;
            TestItem.FilmId = 444;
            AllFilmRecommendations.ThisFilmRecommendation = TestItem;
            AllFilmRecommendations.Add();
            AllFilmRecommendations.ThisFilmRecommendation.Find(TestItem.UserId, TestItem.FilmId);
            AllFilmRecommendations.Delete();
            Boolean found = AllFilmRecommendations.ThisFilmRecommendation.Find(TestItem.UserId, TestItem.FilmId);

            Assert.IsFalse(found);
        }
コード例 #8
0
        public void InstanceOk()
        {
            clsFilmRecommendation aFilmRecommendation = new clsFilmRecommendation();

            Assert.IsNotNull(aFilmRecommendation);
        }
コード例 #9
0
        void GenerateRecommendations(int genreId)
        {
            //create a new instance of the MLContext class
            MLContext mlContext = new MLContext();

            (IDataView trainingDataView, IDataView testDataView) = LoadData(mlContext);
            ITransformer model = BuildAndTrainModel(mlContext, trainingDataView);

            //create an instance of the class which represents the IDataView/ DataViewRow schema
            DataViewSchema modelSchema;

            //find the saved model
            var path = Server.MapPath(@"~/Model.zip");

            //load the saved model
            ITransformer trainedModel = mlContext.Model.Load(path,
                                                             out modelSchema);

            //create a prediction engine for film recommendations
            var predictionEngine = mlContext.Model.CreatePredictionEngine <clsFilmRating, MovieRatingPrediction>(trainedModel);

            var     tempUserId = Session["UserId"];
            Single  userId;
            Boolean signedIn = false;

            //check if user is signed in
            if (tempUserId == null)
            {
                userId = 1;
            }
            else
            {
                userId   = Convert.ToSingle(tempUserId);
                signedIn = true;
            }

            //get all films from the database
            clsFilmGenreCollection AllFilms = new clsFilmGenreCollection();

            AllFilms.GetAllFilmsByGenre(genreId);

            List <clsFilmPrediction> AllPredictions  = new List <clsFilmPrediction>();
            clsFilmPrediction        aFilmPrediction = new clsFilmPrediction();

            foreach (clsFilmGenre aFilm in AllFilms.AllFilmsByGenre)
            {
                var potentialRecommendation = new clsFilmRating {
                    UserId = userId, FilmId = aFilm.FilmId
                };
                var movieRatingPrediction = predictionEngine.Predict(potentialRecommendation);
                //if a rating is high enough, add it to film predictions
                if (Math.Round(movieRatingPrediction.Score, 1) > 4.4)
                {
                    aFilmPrediction        = new clsFilmPrediction();
                    aFilmPrediction.FilmId = aFilm.FilmId;
                    aFilmPrediction.Score  = movieRatingPrediction.Score;

                    AllPredictions.Add(aFilmPrediction);
                }
            }

            //sort them by score
            AllPredictions.Sort();

            //get the ten best recommendations
            var topTenPredictions = AllPredictions.Take(10);

            clsFilmRecommendationCollection FilmRecommendations  = new clsFilmRecommendationCollection();
            clsFilmRecommendation           aRecommendationToAdd = new clsFilmRecommendation();

            clsMostRecommendedFilmsCollection AllMostRecommendedFilms = new clsMostRecommendedFilmsCollection();
            clsMostRecommendedFilms           aMostRecommendedFilm    = new clsMostRecommendedFilms();

            foreach (clsFilmPrediction aTopTenPrediction in topTenPredictions)
            {
                if (signedIn)
                {
                    //save the recommendations for future use
                    aRecommendationToAdd        = new clsFilmRecommendation();
                    aRecommendationToAdd.FilmId = aTopTenPrediction.FilmId;
                    aRecommendationToAdd.UserId = Convert.ToInt32(userId);
                    FilmRecommendations.ThisFilmRecommendation = aRecommendationToAdd;
                    FilmRecommendations.Add();
                }

                aMostRecommendedFilm = new clsMostRecommendedFilms();
                AllMostRecommendedFilms.ThisMostRecommendedFilm.FilmId = aTopTenPrediction.FilmId;

                if (AllMostRecommendedFilms.ThisMostRecommendedFilm.Find(aTopTenPrediction.FilmId) == true)
                {
                    AllMostRecommendedFilms.IncreaseTimesRecommended();
                }
                else
                {
                    AllMostRecommendedFilms.Add();
                }
                //get imdb information for film
                pnlRecommendations.Controls.Add(anImdbApi.GetImdbInformation(aTopTenPrediction.FilmId));
            }
            pnlRecommendations.Visible = true;

            //save the model for later use
            mlContext.Model.Save(trainedModel, modelSchema, path);
        }