/// <summary>
        /// Computes the feature.
        /// </summary>
        /// <param name="user">The user.</param>
        /// <param name="message">The message.</param>
        /// <returns>
        /// The <see cref="FeatureBucket" />
        /// </returns>
        public override FeatureBucket ComputeFeature(User user, Message message)
        {
            var bucket1 = this.Feature1.ComputeFeature(user, message);
            var bucket2 = this.Feature2.ComputeFeature(user, message);

            var bucket = this.Buckets.FirstOrDefault(ia => ia.Item.Bucket1 == bucket1 && ia.Item.Bucket2 == bucket2);

            if (bucket != null)
            {
                return(bucket);
            }

            // A new bucket must have been added to one of the base features
            // Add a new bucket and return it
            bucket = new FeatureBucket
            {
                Index = this.Count,
                Name  = string.Format("{0}, {1}", bucket1.Name, bucket2.Name),
                Item  = new CompoundBucket {
                    Bucket1 = bucket1, Bucket2 = bucket2
                },
                Feature = this
            };

            this.Buckets.Add(bucket);

            return(bucket);
        }
Beispiel #2
0
        /// <summary>
        /// Adds the bucket.
        /// </summary>
        /// <param name="feature">The feature.</param>
        /// <param name="user">The user.</param>
        /// <param name="person">The person.</param>
        /// <param name="userBucketDict">The user bucket dictionary.</param>
        /// <returns>
        /// The <see cref="FeatureBucket" />
        /// </returns>
        internal static FeatureBucket CreateBucket(Feature feature, User user, Person person, Dictionary <Uncertain <string>, FeatureBucket> userBucketDict)
        {
            var personName = person.Name;
            var bucket     = new FeatureBucket {
                Index = feature.Buckets.Count, Name = personName.ToString(), Feature = feature
            };

            feature.Buckets.Add(bucket);

            userBucketDict[personName] = bucket;
            foreach (var email in
                     person.Identities.Select(identity => identity.Email).Where(email => !userBucketDict.ContainsKey(email)))
            {
                userBucketDict[email] = bucket;
            }

            return(bucket);
        }
Beispiel #3
0
        /// <summary>
        /// Adds the bucket.
        /// </summary>
        /// <param name="user">The user.</param>
        /// <param name="person">The person.</param>
        /// <param name="cc">if set to <c>true</c> [cc].</param>
        /// <returns>
        /// The <see cref="FeatureBucket" />
        /// </returns>
        private FeatureBucket AddBucket(User user, Person person, bool cc)
        {
            string personName = person.Name + (cc ? "(Cc)" : string.Empty);
            var    bucket     = new FeatureBucket {
                Index = this.Buckets.Count, Name = personName, Feature = this
            };

            this.Buckets.Add(bucket);

            var bucketDict = cc ? this.BucketDictCc : this.BucketDict;

            bucketDict[user][personName] = bucket;
            foreach (var email in
                     person.Identities.Select(identity => identity.Email.ToString()).Where(email => !bucketDict[user].ContainsKey(email)))
            {
                bucketDict[user][email] = bucket;
            }

            return(bucket);
        }
        /// <summary>
        /// Computes the feature.
        /// </summary>
        /// <param name="user">The user.</param>
        /// <param name="message">The message.</param>
        /// <returns>
        /// The <see cref="FeatureBucket" />
        /// </returns>
        public override FeatureBucket ComputeFeature(User user, Message message)
        {
            var bucket1 = this.Feature1.ComputeFeature(user, message);
            var b       = this.Feature2.ComputeFeature(message);

            var bucket = this.Buckets.FirstOrDefault(ia => ia.Item.First == bucket1 && ia.Item.Second == b);

            if (bucket == null)
            {
                // A new bucket must have been added to one of the base features
                // Add a new bucket and return it
                bucket = new FeatureBucket
                {
                    Index   = this.Count,
                    Name    = string.Format("{0}, {1}={2}", bucket1.Name, this.Feature2.Name, b),
                    Item    = new Pair <FeatureBucket, bool>(bucket1, b),
                    Feature = this
                };

                this.Buckets.Add(bucket);
            }

            return(bucket);
        }