예제 #1
0
 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);
     }
 }
예제 #2
0
        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));
        }
예제 #3
0
		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));
		}
예제 #4
0
		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);
		}
예제 #5
0
        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);
        }
예제 #6
0
        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));
        }
예제 #7
0
 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);
 }
예제 #8
0
		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;
		}
예제 #9
0
        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));
        }
예제 #10
0
		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;
		}
예제 #11
0
 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);
 }
예제 #12
0
        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);
        }
예제 #13
0
		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;
		}
예제 #14
0
        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);
        }
예제 #15
0
		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));
		}
예제 #16
0
		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);
			}
		}
예제 #17
0
		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;
		}
예제 #18
0
		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));
		}