Example #1
0
        public async Task <IEnumerable <GeneralRating> > GetMappedMovies(IEnumerable <UserImdbRating> ratingList)
        {
            try
            {
                List <GeneralRating> mappedRatings = new List <GeneralRating>();
                foreach (UserImdbRating imdbRating in ratingList)
                {
                    MovieMap movie = await _context.Movies
                                     .Find(movie => movie.Title.ToLower().Contains(imdbRating.MovieTitle.ToLower()))
                                     .FirstOrDefaultAsync();

                    if (movie != null)
                    {
                        GeneralRating mappedRating = new GeneralRating
                        {
                            MovieId     = movie.MovieId,
                            RatingValue = imdbRating.RatingValue / 2
                        };
                        mappedRatings.Add(mappedRating);
                    }
                }
                return(mappedRatings);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public static List <GeneralRating> ConvertRatings(List <Rating> ratings)
        {
            List <GeneralRating> ListOfRatings = new List <GeneralRating>();

            for (int i = 0; i < ratings.Count; i++)
            {
                GeneralRating gRating = new GeneralRating(ratings[i].UserId, ratings[i].BookId, ratings[i].Rating1);
                ListOfRatings.Add(gRating);
            }
            return(ListOfRatings);
        }
 /// <summary>
 /// Заполняет матрицу рейтингами элементов, которые оценили оба пользователя
 /// </summary>
 /// <param name="userA"></param>
 /// <param name="userB"></param>
 private void calculate(GeneralUser userA, GeneralUser userB)
 {
     userA.getAllRatings().ForEach(delegate(GeneralRating r)
     {
         GeneralRating r2 = userB.getItemRating(r.getItemId());
         if (r2 != null)
         {
             int i = r.getRating() - 1;
             int j = r2.getRating() - 1;
             matrix[i, j]++;
         }
     });
 }
 /// <summary>
 /// Заполняет матрицу, используя юзер рейтинги для соответствующих элементов.
 /// Рассматриваются юзеры, которые оценили оба элемента
 /// </summary>
 /// <param name="itemA"></param>
 /// <param name="itemB"></param>
 private void calculate(GeneralItem itemA, GeneralItem itemB)
 {
     itemA.getAllRatings().ForEach(delegate(GeneralRating r)
     {
         GeneralRating r2 = itemB.getUserRating(r.getUserId());
         if (r2 != null)
         {
             int i = r.getRating() - 1;
             int j = r2.getRating() - 1;
             matrix[i, j]++;
         }
     });
 }
Example #5
0
        private double estimateItemBasedRating(BookUser user, BookItem item)
        {
            double estimatedRating   = item.getAverageRating();
            int    itemId            = item.getId();
            int    userId            = user.UserId;
            double similaritySum     = 0.0;
            double weightedRatingSum = 0.0;

            GeneralRating existingRatingByUser = user.getItemRating(item.getId());

            if (existingRatingByUser != null)
            {
                estimatedRating = existingRatingByUser.getRating();
            }
            else
            {
                double similarityBetweenItems = 0;
                double weightedRating         = 0;

                dataSet.getBooks().ForEach(delegate(BookItem anotherItem) {
                    // Рассматриваются только те элементы, которые оценивал пользователь

                    GeneralRating anotherItemRating = anotherItem.getUserRating(userId);

                    if (anotherItemRating != null)
                    {
                        similarityBetweenItems = similarityMatrix.getValue(itemId, anotherItem.getId());

                        if (similarityBetweenItems > similarityThreshold)
                        {
                            weightedRating = similarityBetweenItems * anotherItemRating.getRating();

                            weightedRatingSum += weightedRating;
                            similaritySum     += similarityBetweenItems;
                        }
                    }
                });

                if (similaritySum > 0.0)
                {
                    estimatedRating = weightedRatingSum / similaritySum;
                }
            }

            return(estimatedRating);
        }
Example #6
0
        //--------------------------------------------------------------------
        // Приватные вспомогательные методы
        //--------------------------------------------------------------------

        private double estimateUserBasedRating(BookUser user, BookItem item)
        {
            double estimatedRating = user.getAverageRating();

            int itemId = item.getId();
            int userId = user.UserId;

            double similaritySum     = 0.0;
            double weightedRatingSum = 0.0;

            // Проверка, оценивал ли пользователь этот элемент
            GeneralRating existingRatingByUser = user.getItemRating(item.getId());

            if (existingRatingByUser != null)
            {
                estimatedRating = existingRatingByUser.getRating();
            }
            else
            {
                dataSet.getUsers().ForEach(delegate(BookUser anotherUser){
                    GeneralRating itemRating = anotherUser.getItemRating(itemId);

                    if (itemRating != null)
                    {
                        double similarityBetweenUsers = similarityMatrix.getValue(userId, anotherUser.UserId);
                        double ratingByNeighbor       = itemRating.getRating();
                        double weightedRating         = similarityBetweenUsers * ratingByNeighbor;

                        weightedRatingSum += weightedRating;
                        similaritySum     += similarityBetweenUsers;
                    }
                });

                if (similaritySum > 0.0)
                {
                    estimatedRating = weightedRatingSum / similaritySum;
                }
            }

            return(estimatedRating);
        }