Подтвердить что ты не робот

Разделение имени человека на имя и фамилию

ОК, так что в основном я задаю вопрос об их имени Я хочу, чтобы это был один вход, а не имя и фамилия.

Теперь есть способ разбить это имя? и беря только последнее слово из "Предложения", например,

name = "Thomas Winter"
print name.split() 

и то, что будет выводиться, будет просто "зимой"

4b9b3361

Ответ 1

Вы обнаружите, что ваша ключевая проблема с этим подходом не техническая, а человеческая - разные люди пишут свои имена по-разному.

Фактически, терминология "имя и фамилия" сама по себе является ошибочной.

В то время как многие смешанные семьи используют дефинированное семейное имя, такое как Smith-Jones, есть некоторые, которые просто используют оба имени отдельно, "Smith Jones", где оба имени являются фамилией.

У многих европейских фамилий есть несколько частей, таких как "de Vere" и "van den Neiulaar". Иногда эти экстрасмены имеют важную семейную историю - например, префикс, присвоенный королем сотни лет назад.

Боковой вопрос: я правильно использовал эти слова для людей, на которые я ссылаюсь - "de" и "van den" не получают писем для некоторых семей, но для других.

И наоборот, многие азиатские культуры переняли фамилию, потому что семья считается более важной, чем личность.

Последний момент - некоторые люди делают большой магазин в качестве "младшего" или "старшего" или "третьего" - и ваш код не должен относиться к ним как к имени семьи.

Также отмечая, что существует множество людей, которые используют имя, которое не принадлежит родителям, я использовал следующую схему с некоторым успехом:

Полное имя (как обычно написано для адресации почты); Фамилия; Известный как (имя, обычно используемое в разговоре).

например:

Полное имя: William Gates III; Фамилия: Гейтс; Известный как: Билл

Полное имя: Сун Ли; Фамилия: Сун; Известный как: Лиза

Ответ 2

Проблема с попыткой разделить имена от одного входа заключается в том, что вы не получите полную фамилию для людей с пробелами в их фамилии, и я не верю, что вы сможете написать код для управления этим полностью.

Я бы порекомендовал вам просить имена отдельно, если это вообще возможно.

Ответ 3

Это довольно старая проблема, но я нашел ее для поиска решения для разбора фрагментов из имени глобусы вместе.

http://code.google.com/p/python-nameparser/

Ответ 4

Золотое правило данных - не агрегировать слишком рано - гораздо проще склеивать поля, а не разделять их. У большинства людей также есть среднее имя, которое должно быть необязательным полем. У некоторых людей множество наименований. У некоторых людей есть одно имя, одно слово. В некоторых культурах обычно есть словарь средних имен, отдающий дань уважения генеалогическому дереву обратно на посадку на корабле Голгафринчем.

Здесь вам не нужно решение для кода - вам нужно бизнес-правило.

Ответ 5

Простой способ сделать то, что вы задали в python,

name = "Thomas Winter"
LastName = name.split()[1]

(обратите внимание на скобки на разрыве вызова функции.)

split() создает список, в котором каждый элемент находится из исходной строки, помеченной пробелом. Теперь вы можете захватить второй элемент, используя name.split() [1] или последний элемент, используя name.split() [- 1]

Однако, как говорили другие, если вы НЕ УВЕРЕНЫ, вы просто получаете строку типа "First_Name Last_Name", есть еще много проблем.

Ответ 7

Вот как я это делаю в своем приложении:

def get_first_name(fullname):
    firstname = ''
    try:
        firstname = fullname.split()[0] 
    except Exception as e:
        print str(e)
    return firstname

def get_last_name(fullname):
    lastname = ''
    try:
        index=0
        for part in fullname.split():
            if index > 0:
                if index > 1:
                    lastname += ' ' 
                lastname +=  part
            index += 1
    except Exception as e:
            print str(e)
    return lastname

def get_last_word(string):
    return string.split()[-1]

print get_first_name('Jim Van Loon')
print get_last_name('Jim Van Loon')
print get_last_word('Jim Van Loon')

Ответ 8

Вот так:

print name.split()[-1]

Ответ 9

Названия разделов сложнее, чем кажется. Некоторые имена имеют два последних имени; некоторые люди войдут в первую, среднюю и фамилию; некоторые имена имеют два первых имени работы. Более надежный (или наименее ненадежный) способ обработки имен состоит в том, чтобы всегда записывать имя и фамилию в отдельных полях. Конечно, это порождает собственные проблемы, например, как обращаться с людьми только с одним именем, следя за тем, чтобы он работал для пользователей, у которых есть другой порядок имен частей.

Имена жесткие, обращайтесь с осторожностью.

Ответ 10

Поскольку существует так много разных вариаций того, как люди пишут свои имена, но вот как основной способ получить первое/последнее имя с помощью регулярного выражения.

import re
p = re.compile(r'^(\s+)?(Mr(\.)?|Mrs(\.)?)?(?P<FIRST_NAME>.+)(\s+)(?P<LAST_NAME>.+)$', re.IGNORECASE)
m = p.match('Mr. Dingo Bat')
if(m != None):
  first_name = m.group('FIRST_NAME')
  last_name = m.group('LAST_NAME')

Ответ 11

Это определенно более сложная задача, чем на поверхности. Я написал некоторые из проблем, а также мой алгоритм для его решения в моем блоге. Обязательно ознакомьтесь с моим проектом Google Code, если вы хотите получить последнюю версию в PHP:

http://www.onlineaspect.com/2009/08/17/splitting-names/

Ответ 12

вы, вероятно, захотите использовать rsplit для этого:

rsplit ([sep [, maxsplit]])

Возвращает список слов в строке, используя sep в качестве строки разделителя. Если задано maxsplit, выполняется максимум maxsplit, самые правые. Если sep не указан или None, любая строка пробелов является разделителем. За исключением разделения справа, rsplit() ведет себя подобно split(), который подробно описан ниже. Новое в версии 2.4.

Ответ 13

Вот как это сделать в SQL. Но нормализация данных с такого рода вещами - это действительно медведь. Я согласен с Дэйвом Дюплатисом в просьбе о вводе отдельных материалов.

Ответ 14

Я бы указал стандартный формат (некоторые формы используют их), например "Пожалуйста, напишите свое имя в имени, фамилии".

Это упрощает для вас, поскольку имена обычно не содержат запятую. Он также проверяет, что ваши пользователи фактически вводят как имя, так и фамилию.

Ответ 15

name = "Thomas Winter"
first, last = name.split()
print("First = {first}".format(first=first))
#First = Thomas
print("Last = {last}".format(last=" ".join(last)))
#Last = Winter