我正在进行网站迁移,涉及从fullname中提取firstname和lastname.鉴于这些是由最终用户创建的,存在各种排列(尽管英语并且通常不太奇怪).大多数情况下,我可以将第一个单词作为名字,将最后一个单词作为姓氏,但偶尔使用前缀和后缀.在浏览数据并试图了解所有可能的异常时,我意识到这是一个至少部分解决过很多次的常见问题.
在重新发明轮子之前,是否有人有任何适用于他们的正则表达式或有用的代码?性能不是考虑因素,因为这是一次性的实用程序.
要处理的典型值:
Jason Briggs,JD Smith,John Y Citizen,J Scott Myers,Bill Jackobson III,John Mills先生
更新:虽然是常见问题,但典型的解决方案似乎涉及处理大多数情况并手动清理其余情况.
(鉴于必须经历此问题的频率,我原本希望找到一个实用程序库,但无法在Google上找到一个实用程序库)
Jam*_*ers 11
我的建议如下:
拆分空格上的名称.
检查返回数组的长度.如果2,容易拆分.如果更多,接下来.
比较前缀的第一个值(即Mr. Mrs. Dr. Dr.)......如果是,请将其删除,否则转到下一个.
比较第一个长度值.如果它只是1个字符,则组合数组中的前2个项目.
它仍然不是万无一失的; 但是,它应该解决至少80%的案件.
希望这可以帮助.
这可能是不可能的(可靠的).
即使你能为某些名字做到这一点,你也会在某个时候找到一个西班牙人,他们会记下两个姓氏.或者某些人(忘了它是哪个国籍)将放入"姓氏名字".或许多其他情况之一......
你可以做的最好的事情是将2个单词作为名字和姓氏分开,然后手动完成其余的工作(你自己,或聘请一些专业人士)......
最快的事情是混合算法 - 人类方法.你不想花时间整理一个99.99%的时间工作的系统,因为最后5-10%的优化会杀了你.此外,你不想只是将所有工作都转储给一个人,因为大多数情况(我猜)都相当简单.
因此,快速构建类似于JamesEggers建议的内容,但要抓住所有看似不寻常或不符合预定义转换的情况.然后,只需手动完成这些案例(不应该太多).
您可以通过在Mechanical Turk中设置HIT来自己完成这些案例或将其外包给其他用户:
(假设500个案件的价格为0.05美元(高额奖励),您的总费用最多为25美元)