public double CalculateDistance(IDistribution <T> obj1, IDistribution <T> obj2) { double result = obj1.DistinctRepresentedEvents.Union(obj2.DistinctRepresentedEvents) .Select(ngram => Math.Abs(obj1.GetEventFrequency(ngram) - obj2.GetEventFrequency(ngram))) .Sum() / 2; return(result); }
public double CalculateDistance(IDistribution <string> languageModel1, IDistribution <string> languageModel2) { double result = 1.0 - languageModel1.DistinctRepresentedEvents.Intersect(languageModel2.DistinctRepresentedEvents) .Select(ngram => Math.Min(languageModel1.GetEventFrequency(ngram), languageModel2.GetEventFrequency(ngram))) .Sum(); return(result); }