如何解析Python中人们的名字和姓氏?

问题描述 投票:7回答:4

所以基本上我需要解析一个名称并找到以下信息:

  • 名字

  • 首字母缩写(如果员工的名字首字母缩写为D.J.,请同时使用两个字母缩写)

  • 姓氏(包括雇员的后缀,例如Jr.或III。包括在内)


所以这是我正在使用的界面:

输入:

names = ["D.J. Richies III", "John Doe", "A.J. Hardie Jr."]
for name in names:
   print parse_name(name)

预期输出:

{'FirstName': 'D.J.', 'FirstInitial': 'D.J.', 'LastName': 'Richies III' }
{'FirstName': 'John', 'FirstInitial': 'J.', 'LastName': 'Doe' }
{'FirstName': 'A.J.', 'FirstInitial': 'A.J.', 'LastName': 'Hardie Jr.' }

在Regex上并不是很擅长,实际上这可能太过分了。我只是在猜测:

if name[1] == ".":  # we have a name like D.J.?
python parsing
4个回答
3
投票

嗯,对于您的简单示例名称,您可以执行以下操作。

# This separates the first and last names
name = name.partition(" ")
firstName = name[0]
# now figure out the first initial
# we're assuming that if it has a dot it's an initialized name,
# but this may not hold in general
if "." in firstName:
    firstInitial = firstName
else:
    firstInitial = firstName[0] + "."
lastName = name[2]
return {"FirstName":firstName, "FirstInitial":firstInitial, "LastName": lastName}

7
投票

我发现此库对于解析名称非常有用。 https://code.google.com/p/python-nameparser/


3
投票

没有通用的解决方案,解决方案将取决于您施加的约束。对于您在此处给出的规格,这是一个简单的解决方案,可以准确给出所需的内容


3
投票

这基本上与Anurag Uniyal提供的解决方案相同,只是更加紧凑:

© www.soinside.com 2019 - 2024. All rights reserved.