6

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

人们使用什么样的启发式方法来执行拆分?

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

更新:我将问题限制为英文风格的名称。这就是我需要解决的所有问题,并且可能是任何接近这个(英语)问题的人都需要解决的问题。

4

4 回答 4

6

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

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

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

于 2012-11-03T14:19:20.137 回答
3

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

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

不是真正的答案,但在这种情况下,确实没有完美的答案。

于 2012-11-03T14:24:22.420 回答
1

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

就个人而言,恐怕没有一种算法可以为您提供 100% 准确的结果。

于 2012-11-03T14:08:06.713 回答
0

以下假设是英式姓氏。如果不是这种情况,请更新您的问题。

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

于 2012-11-03T14:18:40.660 回答