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]++; } }); }
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); }
//-------------------------------------------------------------------- // Приватные вспомогательные методы //-------------------------------------------------------------------- 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); }