Parse free text to names

This code is a C# port of this VB code that parses free text into a person’s name. The result includes Title, Pedigree, First name, Middle name, Last name and Degree.

I’ve used this code in iContact (Google contacts for Windows)

using System;
using System.Collections.Generic;
using System.Text;

namespace DataLoad.iContact.WinClient
{
public class NameParser
{
private string _title;

public string Title
{
get
{
return _title;
}
}

private string _firstName;

public string FirstName
{
get
{
return _firstName;
}
}

private string _middleName;

public string MiddleName
{
get
{
return _middleName;
}
}

private string _lastName;

public string LastName
{
get
{
return _lastName;
}
}

private string _pedigree;

public string Pedigree
{
get
{
return _pedigree;
}
}

private string _degree;

public string Degree
{
get
{
return _degree;
}
}

private string[] _titles = new string[] {”Mr.”, “Mrs.”, “Ms.”, “Dr.”, “Miss”, “Sir” , “Madam”, “Mayor”, “President”};

private string[] _pedigrees = new string[] {”Jr.”, “Sr.”, “III”, “IV”, “VIII”, “IX”, “XIII”};

private bool IsIn(string text, string[] values, bool caseSensitive)
{
foreach (string v in values)
{
StringComparison compType = StringComparison.InvariantCulture;

if (!caseSensitive)
{
compType = StringComparison.InvariantCultureIgnoreCase;
}

if (text.Equals(v, compType))
{
return true;
}
}

return false;
}

private string CutWord(string text, out string remainder)
{
int p = text.IndexOf(’ ‘);

if (p != -1)
{
remainder = text.Substring(p).Trim();
return text.Substring(0, p).Trim();
}

remainder = string.Empty;
return text;
}

private string CutLastWord(string text, out string remainder)
{
int p = text.LastIndexOf(’ ‘);

if (p != -1)
{
remainder = text.Substring(0, p).Trim();
return text.Substring(p).Trim();
}

remainder = string.Empty;
return text;
}

public NameParser(string text)
{
// title
string word = CutWord(text, out text);
if (IsIn(word, _titles, false))
{
_title = word;
}
else
{
text = string.Format(”{0} {1}”, word, text);
}

// degree
int p = text.IndexOf(’,');
if (p != -1)
{
_degree = text.Substring(p + 1).Trim();
text = text.Substring(0, p).Trim();
}

// pedigree
word = CutWord(text, out text);
if (IsIn(word, _pedigrees, false))
{
_pedigree = word;
}
else
{
text = string.Format(”{0} {1}”, word, text);
}

// rest
_lastName = CutLastWord(text, out text);
_firstName = CutWord(text, out text);
_middleName = text.Trim();
}
}
}

0 comments ↓

There are no comments yet...Kick things off by filling out the form below.

Leave a Comment