用于分割部分个人姓名的算法

时间:2009-10-27 21:52:03

标签: string pattern-recognition

我正在寻找关于分离名称的参考:“John A. Doe”的部分,第一个=约翰,中间= A.,最后= Doe。在墨西哥,我们有父系,母系,第一和第二名,并且可以用不同的排列编写,因此问题非常复杂。

由于它取决于数据,我们正在使用匹配软件来计算每个单词的分数,以便我们可以做出决策(它基于一个大型数据库)。输入数据不干净,它是从一些政府网页导入的,并且是人工过滤的,因此它也可能具有必须被识别的垃圾。有什么建议吗?

[编辑] 例子:

name:
   Javier Abdul Córdoba Gándara
common permutations (or as it may appear in gvt data referring to same person):
   Córdoba Gándara Javier Abdul
   Javier A. Córdoba Gándara
   Javier Abdul Córdoba G.

paternal=Córdoba
maternal=Gándara
first given:Javier
second given:Abdul
name: María de la Luz Sánchez Martínez
paternal:Sánchez
maternal: Martínez
first given: María de la Luz
name: Paloma Viridiana Alin Arias Medina
paternal: Arias
maternal: Medina
first given: Paloma
second given: Viridiana Alin

正如我所说,每个单词的含义取决于分数。如果没有得分,则无法知道

Viridiana
Alin
的名称。

我们有一个非常强大的数据库(8000万条记录左右),所以我们可以使用评分系统。我正在设计一些使用它但寻找其他参考的算法。

2 个答案:

答案 0 :(得分:1)

不幸的是 - 并且我自己完成了相当多的工作 - 您理想的算法将非常符合数据,您需要针对您的特定情况进行此操作。

在开发此算法的总时间和精力中,我会说时间大致如下:

  1. 一般字符串操作的10%
  2. 30%的具体性质 数据(墨西哥名称格式,数据输入怪癖)
  3. 60%以满足数据质量/缺乏 质量
  4. 而且我相信这对于一般的字符串操作非常慷慨。当然,这取决于您是否需要所有记录的质量结果,或者仅需要“干净”记录等,如果您能够忽略“困难”记录,则会使其变得更加简单。

    一些一般提示

    • 如果不需要,请删除非字母数字/空格字符
    • 拆分空格
    • 使用连字符/标点符号来识别姓氏或姓氏
    • 姓名首字母(一般单身 字母)不是姓氏;即他们 必须是第一个/中间
    • 确定您以编程方式识别每个名称的置信度(并彻底测试)。您可能会发现有些数据子集包含需要单独处理的类似模式(它们可能来自不同的来源等)

答案 1 :(得分:0)

您可能需要添加一些自然语言或机器学习来检查。识别作者姓名的问题(例如在科学论文中)是很困难的,因为它们可以用不同的顺序,缩写的程度,精算等来报告。如果你的数据库很脏,那么无论你做什么,都会以模棱两可的方式结束。