我如何分析人';Python中的名字和姓氏是什么?
因此,基本上我需要解析一个名称并找到以下信息:我如何分析人';Python中的名字和姓氏是什么?,python,parsing,Python,Parsing,因此,基本上我需要解析一个名称并找到以下信息: 名字 首字母缩写(如果员工有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.等名字的首字母缩写,则使用两个首字母)
- 姓氏(如果员工有后缀,如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.' }
预期输出:
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.' }
不太擅长正则表达式,事实上这可能有点过头了。我只是猜测:
if name[1] == ".": # we have a name like D.J.?
对于简单的示例名称,您可以这样做
# 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}
我还没有测试过它,但是像这样的函数应该可以在您提供的输入示例中完成这项工作。没有通用的解决方案,解决方案将取决于您设置的约束。对于您在这里给出的规格,有一个简单的解决方案,它给出了您想要的
def parse_name(name):
fl = name.split()
first_name = fl[0]
last_name = ' '.join(fl[1:])
if "." in first_name:
first_initial = first_name
else:
first_initial = first_name[0]+"."
return {'FirstName':first_name, 'FirstInitial':first_initial, 'LastName':last_name}
names = ["D.J. Richies III", "John Doe", "A.J. Hardie Jr."]
for name in names:
print parse_name(name)
输出:
{'LastName': 'Richies III', 'FirstInitial': 'D.J.', 'FirstName': 'D.J.'}
{'LastName': 'Doe', 'FirstInitial': 'J.', 'FirstName': 'John'}
{'LastName': 'Hardie Jr.', 'FirstInitial': 'A.J.', 'FirstName': 'A.J.'}
这与Anurag Uniyal提供的解决方案基本相同,只是稍微紧凑一些:
import re
def parse_name(name):
first_name, last_name = name.split(' ', 1)
first_initial = re.search("^[A-Z.]+", first_name).group()
if not first_initial.endswith("."):
first_initial += "."
return {"FirstName": first_name,
"FirstInitial": first_initial,
"LastName": last_name}
我发现这个库对于解析名称非常有用
它也可以处理格式化的姓氏、姓氏、./p>i18n:你考虑系统,其中姓氏最先出现,而给定的名字是第二个?潜在的问题(不管实现语言)不是显而易见的可解的——见这个副本:NAH,我认为这不符合我的要求。对于更复杂的名称解析器来说,这是一个有趣的观点。最复杂的名称将显示在我的a.J.Hardie Jr.和D.J.Richies III示例中。正则表达式的有趣用法。这可能会处理和适应tan Anurag的更多情况。谢谢你的解决方案。