Пример #1
0
        /// <summary>
        /// Computes the number of original observations, positive
        /// ratings, and negative ratings for each user and item
        /// </summary>
        /// <param name="userRatingCounts">A map from each user to their rating counts.</param>
        /// <param name="itemRatingCounts">A map from each item to its rating counts.</param>
        private void ComputeRatingCounts(
            out IDictionary <string, RatingCounts> userRatingCounts,
            out IDictionary <string, RatingCounts> itemRatingCounts)
        {
            Rand.Restart(12347);
            var positiveOnlyMapping          = new PositiveOnlyDataMapping();
            var negativeDataGeneratorMapping = positiveOnlyMapping.WithGeneratedNegativeData(1.0);

            userRatingCounts = new Dictionary <string, RatingCounts>();
            itemRatingCounts = new Dictionary <string, RatingCounts>();

            // Count the number of positive observations for each user and item.
            foreach (var instance in positiveOnlyMapping.GetInstances(this.positiveOnlyDataset))
            {
                var user = positiveOnlyMapping.GetUser(this.positiveOnlyDataset, instance);
                var item = positiveOnlyMapping.GetItem(this.positiveOnlyDataset, instance);

                RatingCounts ratingCounts;
                if (!userRatingCounts.TryGetValue(user, out ratingCounts))
                {
                    ratingCounts = new RatingCounts();
                    userRatingCounts.Add(user, ratingCounts);
                }

                ++ratingCounts.Original;

                if (!itemRatingCounts.TryGetValue(item, out ratingCounts))
                {
                    ratingCounts = new RatingCounts();
                    itemRatingCounts.Add(item, ratingCounts);
                }

                ++ratingCounts.Original;
            }

            // Compute the number of positive and negative ratings generated for each user and item.
            foreach (var instance in negativeDataGeneratorMapping.GetInstances(this.positiveOnlyDataset))
            {
                var user   = negativeDataGeneratorMapping.GetUser(this.positiveOnlyDataset, instance);
                var item   = negativeDataGeneratorMapping.GetItem(this.positiveOnlyDataset, instance);
                var rating = negativeDataGeneratorMapping.GetRating(this.positiveOnlyDataset, instance);

                if (rating == 1)
                {
                    ++userRatingCounts[user].Positive;
                    ++itemRatingCounts[item].Positive;
                }
                else if (rating == 0)
                {
                    ++userRatingCounts[user].Negative;
                    ++itemRatingCounts[item].Negative;
                }
            }
        }
Пример #2
0
        // Constructor for database end.
        public ProductRating(long pid, string languageString, int nativeTotalReviewCount, int externalTotalReviewCount,
                             int combinedTotalReviewCount, RatingCounts nativeRatings, RatingCounts externalRatings)
        {
            PID            = pid;
            LanguageString = languageString;

            NativeRatings   = nativeRatings;
            ExternalRatings = externalRatings;

            NativeTotalReviewCount   = nativeTotalReviewCount;
            ExternalTotalReviewCount = externalTotalReviewCount;
            CombinedTotalReviewCount = combinedTotalReviewCount;
        }