Противоположность синтаксический анализ , сериализируют
My recommendation would be the following:
Split the names on the spaces.
Check the length of the returned array. If 2, easy split. If more, next.
Compare the 1st value for prefixes (i.e. Mr. Mrs. Ms. Dr.)...if so, remove it else move to next.
Compare the 1st value for length. If it's just 1 character, combine first 2 items in the array.
It's still not fool proof; however, it should address at least 80 per cent of your cases.
Hope this helps.
It's probably impossible to do (reliably).
Even if you can do that for some names, you will get a Spanish person at some point, who will write down both family names. Or some people (forgot which nationality it is) that will put in "lastname firstname". Or one of many other situations...
The best you can probably do is split 2 words as first and last name, then go through the rest manually (yourself, or hire some professionals)...
If this is a one shot deal then I would strongly consider paying someone else who is a specialist to do it for you.
They will be experienced in working with poorly structured data sets.
I have no affiliation with them but Melissa Data provide a service that seems tailored to this sort of thing.
This is an indeterminate problem (or an Oracle problem as I like to call it) and is unsolvable in a reliable way. That is because of existance of names that are both first names and last names e.g., Stanley, Jackson etc. But a try can be given. You need to write a learning program that will be given a set of first names and last names and it will maintain a dictionary of these names, mapped against the probability that it is a first name.
Now, pass all your values to be migrated and using these probabilities you can get a reasonable split between first and last names. Furthermore, if a particular name becomes ambiguous (totally upon you to define ambiguous, but I would define it as the bottom 30 percentile of all probability values I have obtained) then you can flag it for review later.
Hope this helps.
Cheers!
Я откопал очень простое (вероятно, 80%) регулярное выражение, которое у меня было в perl, и добавил несколько удачных имен групп C #:
(?
Я публикую как вики, так что любой может свободно добавлять вещи, которые, по их мнению, могут помочь!
Самый быстрый способ сделать это - гибридный алгоритм и человек. Вы не хотите тратить время на создание системы, которая работает 99,99% времени, потому что последние 5-10% оптимизации вас убьют. Кроме того, вы не хотите просто свалить всю работу на человека, потому что большинство случаев (я предполагаю) довольно просты.
Итак, быстро создайте что-то вроде того, что предложил Джеймс Эггерс, но уловите все случаи, которые кажутся необычными или не соответствуют вашим предопределенным преобразованиям. Затем просто рассмотрите эти случаи вручную (их не должно быть слишком много).
Вы можете пройти эти случаи самостоятельно или передать их другим пользователям, настроив HIT в Mechanical Turk:
http: // aws.amazon.com/mturk/
(Предполагая, что 500 случаев по цене 0,05 доллара США (высокая награда), ваши общие затраты должны составить не более 25 долларов США)
, если ваш юниверс данных содержит <10 тыс. Имен и его единовременная сделка реализует один из сценариев разделения, описанных другими плакатами, в промежуточный файл, затем выполните вручную, просмотрите и при необходимости обновите ( вы будете удивлены, как мало времени уходит на проверку 10к имен). Это займет меньше времени, чем попытки найти и / или построить идеально реализованный алгоритм. Как только ваша вселенная имен> 100k, стоит попробовать запрограммировать выход из нее и создать файл для ручного просмотра и изменения всех имен, которые не дают вам идеального имени и разделения фамилии.
Как указывали другие, не существует решения, которое работает во всех случаях. Одна из причин этого в том, что есть имена, которые можно использовать как имя, так и фамилию.
Вы можете использовать базу данных имен и выяснить, какие части имени возможны имена. Если вы также знаете страну человека с определенным именем, вы можете значительно повысить точность.
Для бесплатной базы данных имен см. этот ответ .
Если у вас всего несколько пользователей (<100k), посмотрите, сможете ли вы заставить кого-нибудь сделать это вручную и потратить свое время на что-нибудь стоящее. Поскольку это разовая работа, рентабельность инвестиций - отстой: -)