private static void HandleRunTogetherMiddleInitialAndSurname(NameParts result) { if (result.Surname.Length > 2 && result.Surname[1] == '.') { result.MiddleName = (result.MiddleName ?? "" + " " + result.Surname.Substring(0, 2)).Trim(); result.Surname = result.Surname.Substring(2); } }
private static void HandleDoubleWordSurnamePrefix(NameParts result, ICollection <string> parts) { if (!IsTwoPartSurnamePrefix(parts)) { return; } result.Surname = String.Join(" ", parts.Skip(parts.Count - 2).Take(2)) + " " + result.Surname; result.MiddleName = parts.Count == 2 ? null : String.Join(" ", parts.Take(parts.Count - 2)); }
private static void HandleDoubleWordSurnamePrefix(NameParts result, ICollection<string> parts) { if (!IsTwoPartSurnamePrefix(parts)) { return; } result.Surname = String.Join(" ", parts.Skip(parts.Count - 2).Take(2)) + " " + result.Surname; result.MiddleName = parts.Count == 2 ? null : String.Join(" ", parts.Take(parts.Count - 2)); }
private static void HandleMultiPartSurname(NameParts result) { if (result.MiddleName == null) { return; } var parts = result.MiddleName.Split(' '); HandleDoubleWordSurnamePrefix(result, parts); HandleSingleWordSurnamePrefixGivenAMiddleNameExists(result, parts); HandleSingleWordSurnamePrefix(result, parts); }
private static void HandleSingleWordSurnamePrefix(NameParts result, ICollection <string> parts) { var indexOfPrefix = IndexOfAnyCaseInsensitive(parts, SingleWordNamePrefixes); if (indexOfPrefix != parts.Count - 1) { return; } result.Surname = parts.Last() + " " + result.Surname; result.MiddleName = parts.Count == 1 ? null : String.Join(" ", parts.Take(parts.Count - 1)); }
private static string[] HandleNameSuffix(IList <string> sections, NameParts result, string[] nameParts) { if (new[] { ".", " II", " III", " IV", " Jr", " Sr", " V" }.Any(x => sections[0].EndsWith(x, StringComparison.OrdinalIgnoreCase))) { result.Suffix = nameParts.Last(); nameParts = nameParts.Take(nameParts.Length - 1).ToArray(); } else if (sections.Count > 1) { result.Suffix = String.Join(", ", sections.Skip(1).Select(x => x.Trim())); } return(nameParts); }
private static string[] HandleNameSuffix(IList<string> sections, NameParts result, string[] nameParts) { if (new[] { ".", " II", " III", " IV", " Jr", " Sr", " V" }.Any(x => sections[0].EndsWith(x, StringComparison.OrdinalIgnoreCase))) { result.Suffix = nameParts.Last(); nameParts = nameParts.Take(nameParts.Length - 1).ToArray(); } else if (sections.Count > 1) { result.Suffix = String.Join(", ", sections.Skip(1).Select(x => x.Trim())); } return nameParts; }
private static void HandleSingleWordSurnamePrefixGivenAMiddleNameExists(NameParts result, ICollection <string> parts) { if (parts.Count < 2) { return; } var indexOfPrefix = IndexOfAnyCaseInsensitive(parts, "o"); if (indexOfPrefix != parts.Count - 1 || result.Surname.StartsWith("o", StringComparison.OrdinalIgnoreCase)) { return; } result.Surname = parts.Last() + " " + result.Surname; result.MiddleName = parts.Count == 1 ? null : String.Join(" ", parts.Take(parts.Count - 1)); }
private static string[] HandleMultiPartGivenName(NameParts result, string[] nameParts) { var given = result.GivenName ?? ""; var threeWordSurnamePrefix = new[] { given, nameParts[0] }; if (nameParts.Length > 2 && nameParts[1].Length > 1 && IsTwoPartSurnamePrefix(threeWordSurnamePrefix)) { result.GivenName += " " + String.Join(" ", nameParts.Take(2)); nameParts = nameParts.Skip(2).ToArray(); } else if (nameParts.Length > 1 && nameParts[0].Length > 1 && SingleWordNamePrefixes.Any(x => given.Equals(x, StringComparison.OrdinalIgnoreCase))) { result.GivenName += " " + nameParts.First(); nameParts = nameParts.Skip(1).ToArray(); } return nameParts; }
private static string[] HandleNamePrefix(string[] nameParts, NameParts result) { while (nameParts[0].EndsWith(".") && nameParts[0].Length > 2 && nameParts[0].IndexOf('.') == nameParts[0].Length - 1 && !nameParts[0].Equals("St.", StringComparison.OrdinalIgnoreCase)) { if (!String.IsNullOrEmpty(result.Prefix)) { result.Prefix += " " + nameParts[0]; } else { result.Prefix = nameParts[0]; } nameParts = nameParts.Skip(1).ToArray(); } return(nameParts); }
private static string[] HandleMultiPartGivenName(NameParts result, string[] nameParts) { var given = result.GivenName ?? ""; var threeWordSurnamePrefix = new[] { given, nameParts[0] }; if (nameParts.Length > 2 && nameParts[1].Length > 1 && IsTwoPartSurnamePrefix(threeWordSurnamePrefix)) { result.GivenName += " " + String.Join(" ", nameParts.Take(2)); nameParts = nameParts.Skip(2).ToArray(); } else if (nameParts.Length > 1 && nameParts[0].Length > 1 && SingleWordNamePrefixes.Any(x => given.Equals(x, StringComparison.OrdinalIgnoreCase))) { result.GivenName += " " + nameParts.First(); nameParts = nameParts.Skip(1).ToArray(); } return(nameParts); }
private static string[] HandleNamePrefix(string[] nameParts, NameParts result) { while (nameParts[0].EndsWith(".") && nameParts[0].Length > 2 && nameParts[0].IndexOf('.') == nameParts[0].Length - 1 && !nameParts[0].Equals("St.", StringComparison.OrdinalIgnoreCase)) { if (!String.IsNullOrEmpty(result.Prefix)) { result.Prefix += " " + nameParts[0]; } else { result.Prefix = nameParts[0]; } nameParts = nameParts.Skip(1).ToArray(); } return nameParts; }
public static NameParts ParseName(this string name) { var result = new NameParts(); if (name == null) { return(result); } name = name.Trim(); if (String.IsNullOrEmpty(name)) { return(result); } name = NameWithoutAliases(name); name = name.Replace('\"', ' '); var sections = name.Split(','); var nameParts = sections.First().Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); nameParts = HandleNameSuffix(sections, result, nameParts); nameParts = HandleNamePrefix(nameParts, result); nameParts = HandleRunTogetherInitialsInGivenName(nameParts); if (nameParts.Length > 1) { result.GivenName = nameParts.First(); nameParts = nameParts.Skip(1).ToArray(); nameParts = HandleMultiPartGivenName(result, nameParts); } result.Surname = nameParts.Last(); if (nameParts.Length > 1) { result.MiddleName = String.Join(" ", nameParts.Take(nameParts.Length - 1).ToArray()); } HandleRunTogetherMiddleInitialAndSurname(result); HandleMultiPartSurname(result); return(result); }
private static void HandleSingleWordSurnamePrefix(NameParts result, ICollection<string> parts) { var indexOfPrefix = IndexOfAnyCaseInsensitive(parts, SingleWordNamePrefixes); if (indexOfPrefix != parts.Count - 1) { return; } result.Surname = parts.Last() + " " + result.Surname; result.MiddleName = parts.Count == 1 ? null : String.Join(" ", parts.Take(parts.Count - 1)); }
public static NameParts ParseName(this string name) { var result = new NameParts(); if (name == null) { return result; } name = name.Trim(); if (String.IsNullOrEmpty(name)) { return result; } name = NameWithoutAliases(name); name = name.Replace('\"', ' '); var sections = name.Split(','); var nameParts = sections.First().Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); nameParts = HandleNameSuffix(sections, result, nameParts); nameParts = HandleNamePrefix(nameParts, result); nameParts = HandleRunTogetherInitialsInGivenName(nameParts); if (nameParts.Length > 1) { result.GivenName = nameParts.First(); nameParts = nameParts.Skip(1).ToArray(); nameParts = HandleMultiPartGivenName(result, nameParts); } result.Surname = nameParts.Last(); if (nameParts.Length > 1) { result.MiddleName = String.Join(" ", nameParts.Take(nameParts.Length - 1).ToArray()); } HandleRunTogetherMiddleInitialAndSurname(result); HandleMultiPartSurname(result); return result; }
private static void HandleSingleWordSurnamePrefixGivenAMiddleNameExists(NameParts result, ICollection<string> parts) { if (parts.Count < 2) { return; } var indexOfPrefix = IndexOfAnyCaseInsensitive(parts, "o"); if (indexOfPrefix != parts.Count - 1 || result.Surname.StartsWith("o", StringComparison.OrdinalIgnoreCase)) { return; } result.Surname = parts.Last() + " " + result.Surname; result.MiddleName = parts.Count == 1 ? null : String.Join(" ", parts.Take(parts.Count - 1)); }