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);
        }
Ejemplo n.º 2
0
        /// <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));
        }