/// <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); }
/// <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); }
/// <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); }