public static bool ApproximatelyEquals(this string source, string target, FuzzyStringComparisonTolerance tolerance, params FuzzyStringComparisonOptions[] options) { List<double> comparisonResults = new List<double>(); if (!options.Contains(FuzzyStringComparisonOptions.CaseSensitive)) { source = source.Capitalize(); target = target.Capitalize(); } // Min: 0 Max: source.Length = target.Length if (options.Contains(FuzzyStringComparisonOptions.UseHammingDistance)) { if (source.Length == target.Length) { comparisonResults.Add(source.HammingDistance(target) / target.Length); } } // Min: 0 Max: 1 if (options.Contains(FuzzyStringComparisonOptions.UseJaccardDistance)) { comparisonResults.Add(source.JaccardDistance(target)); } // Min: 0 Max: 1 if (options.Contains(FuzzyStringComparisonOptions.UseJaroDistance)) { comparisonResults.Add(source.JaroDistance(target)); } // Min: 0 Max: 1 if (options.Contains(FuzzyStringComparisonOptions.UseJaroWinklerDistance)) { comparisonResults.Add(source.JaroWinklerDistance(target)); } // Min: 0 Max: LevenshteinDistanceUpperBounds - LevenshteinDistanceLowerBounds // Min: LevenshteinDistanceLowerBounds Max: LevenshteinDistanceUpperBounds if (options.Contains(FuzzyStringComparisonOptions.UseNormalizedLevenshteinDistance)) { comparisonResults.Add(Convert.ToDouble(source.NormalizedLevenshteinDistance(target)) / Convert.ToDouble((Math.Max(source.Length, target.Length) - source.LevenshteinDistanceLowerBounds(target)))); } else if (options.Contains(FuzzyStringComparisonOptions.UseLevenshteinDistance)) { comparisonResults.Add(Convert.ToDouble(source.LevenshteinDistance(target)) / Convert.ToDouble(source.LevenshteinDistanceUpperBounds(target))); } if (options.Contains(FuzzyStringComparisonOptions.UseLongestCommonSubsequence)) { comparisonResults.Add(1 - Convert.ToDouble((source.LongestCommonSubsequence(target).Length) / Convert.ToDouble(Math.Min(source.Length, target.Length)))); } if (options.Contains(FuzzyStringComparisonOptions.UseLongestCommonSubstring)) { comparisonResults.Add(1 - Convert.ToDouble((source.LongestCommonSubstring(target).Length) / Convert.ToDouble(Math.Min(source.Length, target.Length)))); } // Min: 0 Max: 1 if (options.Contains(FuzzyStringComparisonOptions.UseSorensenDiceDistance)) { comparisonResults.Add(source.SorensenDiceDistance(target)); } // Min: 0 Max: 1 if (options.Contains(FuzzyStringComparisonOptions.UseOverlapCoefficient)) { comparisonResults.Add(1 - source.OverlapCoefficient(target)); } // Min: 0 Max: 1 if (options.Contains(FuzzyStringComparisonOptions.UseRatcliffObershelpSimilarity)) { comparisonResults.Add(1 - source.RatcliffObershelpSimilarity(target)); } if (comparisonResults.Count == 0) { return false; } if (tolerance == FuzzyStringComparisonTolerance.Strong) { if (comparisonResults.Average() < 0.25) { return true; } else { return false; } } else if (tolerance == FuzzyStringComparisonTolerance.Normal) { if (comparisonResults.Average() < 0.5) { return true; } else { return false; } } else if (tolerance == FuzzyStringComparisonTolerance.Weak) { if (comparisonResults.Average() < 0.75) { return true; } else { return false; } } else if (tolerance == FuzzyStringComparisonTolerance.Manual) { if (comparisonResults.Average() > 0.6) { return true; } else { return false; } } else { return false; } }
public static string GetValidSortableName(this string value) { if (String.IsNullOrEmpty(value)) return String.Empty; // processing order is important to achieve output like ODLC value = value.ReplaceAbbreviations(); value = value.ReplaceDiacritics(); value = value.StripSpecialCharacters(); value = value.ShortWordMover(); // "The Beatles" becomes "Beatles, The" value = value.Capitalize(); // "blink-182" becomes "Blink 182" value = value.StripExcessWhiteSpace(); return value; }
private static void Capitalize(this ReadablilityCondition conditions, ref string value) { value = conditions.Capitalize(value); }
public static string MakeHumanReadable(this string instance) { return instance.Capitalize().Humanize(); }
private static string Capitalize(this ReadablilityCondition conditions, string value) { if (conditions.Capitalize() && !value.IsNullEmptyOrWhiteSpace()) { char firstChar = value[0]; string substring = value.Length == 0 ? string.Empty : value.Substring(1); if (char.IsLower(firstChar)) return string.Format("{0}{1}", char.ToUpper(firstChar), substring); } return value; }