前几天,当我试图为我的常用名字找到一个适用的电子邮件地址时,我正在考虑这个问题。
假设我将美国大约 1.5 亿男性的所有姓名都保存在一个文件中,并且我想找出“不存在但听起来像他们应该存在的男性”。也就是说,我想找出在我的所有姓名记录中没有一个人被命名为该组合的名称组合(名字、中间名、姓氏)。假设我欣赏独特名称的优点,但不想要任何不熟悉和发音错误的缺点。
当然,我可以编一个像“Nickleback Sunshine Cheeseburger”这样的名字,并且有理由怀疑没有人会被命名为这个组合,但这可能会让人们感到困惑,所以我想要这个系列中存在的名字。因此,像“Chao-Lin”这样具有不同语言起源的名字虽然可能与姓氏“Jones”一起出现,但它们不太可能出现在 Jones 中,并且看起来更符合类似语言起源的姓氏,如“Chao-林阔”。与帕特尔等人相比,何塞更有可能与冈萨雷斯一起出现。
当然,这些概念中的任何一个都必须通过数据结构来加强。
举个例子,如果“John Marcus Black”不存在,那会很有趣,因为名称中的所有名称都是常见的,并且经常一起出现,只是没有按顺序出现。
我想到的第一件事是某种按频率加权的特里图或有向图,但它仅适用于“自动完成”之类的功能,我们正在寻找的东西实际上并不存在于集合中。我也在考虑后缀树,但不确定这是否是一个好的用例。
我确信有一种机器学习算法足以找到这些名字,但我知道的不多。
奖金,最正常的唯一名称,给出了必要的姓氏。给定一个像“Smith”这样的起始名字,想出最令人惊讶的缺失名字。
tl;dr 1. 给定文件中所有美国男性的名字,找出可能应该存在但不存在的 n 个名字。另外:有些男人有中间名,有些没有。