private Dictionary <Algorithms.Diff, Algorithms.Diff> ExtractMatchesUsingStringDistance(IEnumerable <Algorithms.Diff> deletes, IEnumerable <Algorithms.Diff> inserts) { var matches = new Dictionary <Algorithms.Diff, Algorithms.Diff>(); foreach (var delete in deletes) { foreach (var insert in inserts) { var delText = FormatStringForDistanceMetric(delete.text); var insText = FormatStringForDistanceMetric(insert.text); var calculator = new StringDistanceCalculator(); var stringDistance = calculator.CalculateStringDistanceBetween(delText, insText); double averageLength = (delText.Length + insText.Length) / 2.0; double stringDistanceRate = stringDistance / averageLength; if (stringDistanceRate < MinimumAcceptedDistanceRate) { matches.Add(delete, insert); break; } } } return(matches); }
/// <summary> /// Compares EvoString genetic heritage. /// </summary> /// <param name="lookAlike"></param> /// <returns>Diff between chromosomes, if chromosomes are different in lenght the delta adds up.</returns> public int Compare(EvoString lookAlike) { //return StringDistanceCalculator.Levenshtein(this.chromosome, lookAlike.chromosome); return(StringDistanceCalculator.iLevenshtein(this.chromosome, lookAlike.chromosome)); }