题
我正在寻找有关分隔名称的参考资料:“约翰·A.Doe”部分,第一个=John,中间=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 万条记录),因此我们可以使用评分系统。我正在设计一些使用该算法的算法,但正在寻找其他参考资料。
解决方案
不幸的是 - 并且我自己做了相当多的这项工作 - 您的理想算法将非常特定于数据,并且您需要根据您的特定情况来解决这个问题。
在开发该算法的总时间和精力中,我想说时间将大致划分如下:
- 10% 用于一般字符串操作
- 数据的特定性质为30%(墨西哥名称格式,数据输入怪癖)
- 60%满足数据质量 /质量不足
我相信这对于一般的字符串操作来说是相当慷慨的。当然,这取决于您是否需要所有记录的高质量结果,还是仅需要“干净”的记录等,如果您能够忽略“困难”的记录,那么事情就会变得简单得多。
一些一般提示
- 如果不需要,请删除非字母数字/空格字符
- 按空格分割
- 使用连字符/标点符号来识别姓氏或姓氏
- 缩写(即 一般来说 单个字母)不是姓氏;IE。他们必须是第一 /中间
- 确定您以编程方式识别每个名称的置信度(并彻底测试)。您可能会发现某些数据子集包含类似的模式,需要单独处理(它们可能来自不同的来源等)
其他提示
您可能需要添加一些自然语言或机器学习来检查。识别作者姓名的问题(例如在科学论文中)是很困难的,因为它们可以用不同的顺序,缩写的程度,精算等来报告。如果你的数据库很脏,那么无论你做什么,都会以模棱两可的方式结束。
不隶属于 StackOverflow