将英文名称分为名字和姓氏的最佳策略

时间:2012-11-03 14:05:08

标签: algorithm split pseudocode

我有一个名单列表,我需要将它们分成名字和姓氏。由于某些名称中有2-3个空格,因此无法对空格进行简单拆分。

人们用什么样的启发式来进行拆分?

请注意,这不是有效询问如何在空间分割的问题的重复;我正在寻找启发式算法和算法,而不是实际的代码帮助。

更新:我将问题集限制为英文名称。这就是我需要解决的问题,也许所有接近这个(英语)问题的人都需要这样做。

4 个答案:

答案 0 :(得分:6)

我读过一篇关于这个主题的非常有趣和全面的文章:

http://www.w3.org/International/questions/qa-personal-names

它甚至建议你自问是否真的需要单独的字段来表示名字和姓氏。它似乎取决于您的应用程序的目标区域。

答案 1 :(得分:3)

虽然没有完全解决这个问题,但有两种方法可以提供帮助。

  1. 以编程方式分离简单的那些,不容易的那些被推入不同的列表,“剩下要分开”。手动排序该列表。在手动排序时,可能会出现一些可以编码的启发式方法,从而进一步减少剩余列表的大小。如果这是一次性的事情,并且列表不是超级大规模,那么这将完成工作。
  2. 一个密切相关的问题是,当一个名称被拆分时,你不知道哪个是第一个,哪个是最后一个。有些系统通过进行模糊查找来解决这个问题,如果在第一次尝试时找不到匹配项,请翻转名字和姓氏,然后重试。您没有说为什么您需要拆分名称。如果要查找参考数据,请考虑某种类似的模糊查找启发式方法,它允许尝试不同的拆分,而不是试图让前面的拆分正确。
  3. 不是真正的答案,但在这种情况下确实没有完美的答案。

答案 2 :(得分:1)

不同的国家和地区的名称格式不同。例如,亚洲的姓氏通常是第一个,然后是名字。西方,你有第一个名字和姓氏惯例,但是当人们翻倍或包含中间名时会变得复杂。然后一些地区的人只有一个名字。

就个人而言,我认为没有一种算法可以让你100%准确的结果我担心。

答案 3 :(得分:0)

以下假设英式姓氏。如果情况并非如此,请更新您的问题。

通常可以安全地假设最后一个空格字符表示一个人姓氏的开头。但是,由于存在例外,一种策略是从其他来源编译已知多字姓氏的大型数据库。然后,您可以测试这些姓氏,并将其视为例外。