public static List <float> CalculateProbability(KeyValuePair <NGram <T>, HashSet <NGram <T> > > set, NGramDistribution <T> distrubtion) { distrubtion.NullCheck(); float sum = set.Value.Select(x => distrubtion.RetrieveCount(x)).Sum(); return(set.Value .Select(x => (float)distrubtion.RetrieveCount(x) / sum) .ToList()); }
/// <summary> /// Assuming NGram[] is homogenous /// </summary> public static float CalculateProbability( Dictionary <NGram <T>, HashSet <NGram <T> > > blockedGrams, NGramDistribution <T> distrubution, NGram <T>[] array, int x, int y) { if (!blockedGrams.ContainsKey(array[x])) { return(0); } var value = blockedGrams[array[x]]; if (!value.Contains(array[y])) { return(0); } float sumCount = distrubution .AsParallel() .Where(z => value.Contains(z.Key)) .Sum(q => q.Value); return(distrubution.RetrieveCount(array[y]) / sumCount); }