using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; namespace Sony.Filtr.Utility { public class TextUtility { public static string GenerateSlug(string phrase) { string str = RemoveAccent(phrase).ToLower(); // invalid chars str = Regex.Replace(str, @"[^a-z0-9\s-]", ""); // convert multiple spaces into one space str = Regex.Replace(str, @"\s+", " ").Trim(); // cut and trim str = str.Substring(0, str.Length <= 45 ? str.Length : 45).Trim(); str = Regex.Replace(str, @"\s", "-"); // hyphens return str; } public static string RemoveAccent(string txt) { byte[] bytes = System.Text.Encoding.GetEncoding("Cyrillic").GetBytes(txt); return System.Text.Encoding.ASCII.GetString(bytes); } public static IEnumerable GetArtistVariations(string artistName) { List nameVariations = new List(); artistName = artistName.ToLower(); nameVariations.Add(artistName); nameVariations.Add("the " + artistName); if (artistName.Contains(" & ")) nameVariations.Add(artistName.Replace(" & ", " and ")); if (artistName.Contains(" and ")) nameVariations.Add(artistName.Replace(" and ", " & ")); var withoutAccents = RemoveAccent(artistName); if (string.IsNullOrWhiteSpace(withoutAccents) && withoutAccents != artistName) nameVariations.Add(withoutAccents); var withoutSpecialCharacters = RemoveSpecialCharacters(artistName); if (!string.IsNullOrWhiteSpace(withoutSpecialCharacters) && withoutSpecialCharacters != artistName) nameVariations.Add(withoutSpecialCharacters); return nameVariations; } public static bool LooksLikeSpecifiedArtist(string name1, string name2) { return GetArtistVariations(name1).Intersect(GetArtistVariations(name2), StringComparer.InvariantCultureIgnoreCase).Any(); } public static string RemoveSpecialCharacters(string str) { StringBuilder sb = new StringBuilder(); foreach (char c in str) { if (c == '\'' || c == '´' || c == '`') { // } else if (c == ' ' || (c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) { sb.Append(c); } else { sb.Append(' '); } } var stringWithExtraSpaces = Regex.Replace(sb.ToString(), @"\s+", " "); return stringWithExtraSpaces; } } }