Beispiel #1
0
        public List <UsersSimilarity> CreateUserSimilarities(ISettings settings,
                                                             int userId,
                                                             List <int> comparedUserId,
                                                             BookScore[] userBooks,
                                                             List <BookScore[]> comparedUserBooks,
                                                             List <double?> similarity = null)
        {
            var userSimilarities = new List <UsersSimilarity>();
            var comparer         = new BookScoreEqualityComparer();

            for (int i = 0; i < comparedUserId.Count; i++)
            {
                var comparedUserRatesForMutualBooks = comparedUserBooks[i].Intersect(userBooks, comparer).ToArray();
                var userRatesForMutualBooks         = userBooks.Intersect(comparedUserBooks[i], comparer).ToArray();
                var booksUniqueForComparedUser      = comparedUserBooks[i].Except(userBooks, comparer).ToArray();
                var temp = new UsersSimilarity
                {
                    AverageScoreForComparedUser = RandomNumber(3),
                    ComparedUserId = comparedUserId[i],
                    UserId         = userId,
                    Similarity     = similarity?[i],
                    SimilarityType = (int)settings.SimilarityDistance,
                    ComparedUserRatesForMutualBooks = comparedUserRatesForMutualBooks,
                    BooksUniqueForComparedUser      = booksUniqueForComparedUser,
                    UserRatesForMutualBooks         = userRatesForMutualBooks
                };
                userSimilarities.Add(temp);
            }

            return(userSimilarities);
        }
Beispiel #2
0
        public UsersSimilarity SelectMutualAndUniqueBooksForUsers(int userId, int comparedUserId)
        {
            var books1   = _context.GetBooksRatesByUserId(userId);
            var books2   = _context.GetBooksRatesByUserId(comparedUserId);
            var comparer = new BookScoreEqualityComparer();

            var userRatesForMutualBooks = books1.Intersect(books2, comparer).ToArray();

            if (userRatesForMutualBooks.Length == 0)
            {
                return(null);
            }
            var comparedUserRatesForMutualBooks = books2.Intersect(books1, comparer).ToArray();

            var uniqueBooksForComparedUser = books2.Except(books1, comparer).ToArray();

            return(new UsersSimilarity
            {
                BooksUniqueForComparedUser = uniqueBooksForComparedUser,
                UserRatesForMutualBooks = userRatesForMutualBooks,
                ComparedUserRatesForMutualBooks = comparedUserRatesForMutualBooks,
                UserId = userId,
                ComparedUserId = comparedUserId,
                AverageScoreForComparedUser = _context.GetAverageRateForUser(comparedUserId),
            });
        }