Solved

Need name extraction function?

Posted on 2007-11-16
6
247 Views
Last Modified: 2013-11-07
I need some functions that will take a person's full name as a string, and attempt to extract the various piecces of it, i.e.:

GetFirstName(), GetNamePrefix(), GetMiddleName(), GetNameSuffix()

What I would pass in would be something like:
John Doe
Dr. Alvin Chipmunk Ph.D.
Miss Mary Kate O'Reily
Mr. Alberto Juan De Laurentis

I was hoping that there might be some functions out there already to handle this so I wouldn't have to re-invent the wheel? I'll take code in either C# or VB.NET, or whatever really, as long as it can be converted to .NET of some sort.
0
Comment
Question by:toddhd
  • 3
  • 2
6 Comments
 
LVL 55

Expert Comment

by:Jaime Olivares
Comment Utility
Is is not as easy. Consider this case:
Juan Marcelo Menotti
How you will know if Marcelo is the Middle Name or it is the second first name?
A dictionary will be useless.

You can try to attack the problem by a different side. Store the name components separately:


class PersonName

{

    string Prefix;

    string FirstName;

    string MidName;

    string LastName;

    string Suffix;
 

    public string GetFirstName() { return FirstName; }

    public string GetMiddleName() { return MidName; }

    public string GetLastName() { return LastName; } 

    // etcetera
 

    public override string ToString()

   {

         StringBuilder sb = new StringBuilder();

         if (!string.IsNullOrEmpty(Prefix))

               sb.Append(Prefix+" ");

         if (!string.IsNullOrEmpty(FirstName))

               sb.Append(FirstName+" ");

         if (!string.IsNullOrEmpty(MidName))

               sb.Append(MidName+" ");

         // etcetera

    }

}

Open in new window

0
 
LVL 55

Expert Comment

by:Jaime Olivares
Comment Utility
sorry, ToString method should end with:

    return sb.ToString();
}
0
 
LVL 8

Author Comment

by:toddhd
Comment Utility
jaime,
I agree with you approach completely, but I just dont have that luxury :)
I have a client (a bank no less) that has some very old data in a database where the names have been entered as one long string, and well - you guessed it, they want to get the data back out.
I am working on my own function, and made up a list of prefixes I know of to check against. Postfixes are tougher as they are practically limitless, and some have periods (Ph.D., Sr. D.D.S) and some don't (such as roman numerals). At some point, I just have to make an educated guess.

The first/last name thing is an issue with non-American names, and middle names can get out of hand sometimes as well, since there can be multiple ones.
0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 
LVL 22

Expert Comment

by:JimBrandley
Comment Utility
I would start with a split on blanks. You can deduce some of the structure by knowing the number of elements in the name.
string fullName = "Dr. Ralph Waldo Emerson III Esq., PhD, MD";
string[] elements = fullName.Split(' ');

Jim
0
 
LVL 55

Accepted Solution

by:
Jaime Olivares earned 500 total points
Comment Utility
toddhd,
I have been there.
A possible approach is to make a semi-automated migration, one-by-one. Create a migration application where you suggest an interpretation and let user to choose a name structure, some UI with radio buttons  like (using Jim's example):

Full Name: Dr. Ralph Waldo Emerson III Esq., PhD, MD
 

Please correct name structure, if needed:

Dr.      (x) Prefix, ( ) First, ( ) Middle, ( ) Last, ( ) Postfix 

Ralph    ( ) Prefix, (x) First, ( ) Middle, ( ) Last, ( ) Postfix 

Waldo    ( ) Prefix, ( ) First, (x) Middle, ( ) Last, ( ) Postfix

Emerson  ( ) Prefix, ( ) First, (x) Middle, ( ) Last, ( ) Postfix 

III      ( ) Prefix, ( ) First, ( ) Middle, (x) Last, ( ) Postfix

Esq.     ( ) Prefix, ( ) First, ( ) Middle, ( ) Last, (x) Postfix

PhD      ( ) Prefix, ( ) First, ( ) Middle, ( ) Last, (x) Postfix

MD       ( ) Prefix, ( ) First, ( ) Middle, ( ) Last, (x) Postfix

Open in new window

0
 
LVL 8

Author Closing Comment

by:toddhd
Comment Utility
jaime, I'm just going to award you the points. While it's not an exact answer, it at least tells me that I'm on the right track with what I'm doing, and that no pre-written methiod exists to do this. I'll have to post my code somewhere once I'm done so other people can use it i nthe future :)
0

Featured Post

How to improve team productivity

Quip adds documents, spreadsheets, and tasklists to your Slack experience
- Elevate ideas to Quip docs
- Share Quip docs in Slack
- Get notified of changes to your docs
- Available on iOS/Android/Desktop/Web
- Online/Offline

Join & Write a Comment

Wouldn’t it be nice if you could test whether an element is contained in an array by using a Contains method just like the one available on List objects? Wouldn’t it be good if you could write code like this? (CODE) In .NET 3.5, this is possible…
It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
Illustrator's Shape Builder tool will let you combine shapes visually and interactively. This video shows the Mac version, but the tool works the same way in Windows. To follow along with this video, you can draw your own shapes or download the file…
This tutorial demonstrates a quick way of adding group price to multiple Magento products.

771 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now