从电子邮件地址中提取姓名

数据挖掘 机器学习 深度学习 nlp
2022-02-25 06:16:45

假设我有两个电子邮件地址,我想看看它们是否可能属于同一个人。例如,Cameron_M_Thompson@company.com并且cthompson1024@personal.com很可能来自同一个人(不一定要确定,只要可能性就足够了)。

我有两个方向来实现这一点,一个是两个电子邮件地址之间的字符串比较,另一个是首先从电子邮件地址中提取姓名,然后比较他们是否可能是同一个人。与上面的示例一样,提取的名称应该是Cameron M Thompsonand c thompson

我还想知道是否保证其中一个电子邮件地址包含全名(通常公司电子邮件地址具有全名),这是否有助于提取另一个电子邮件地址中的姓名(个人电子邮件地址可能并不总是包含全名),或者这有助于比较两个电子邮件地址。

我很难弄清楚上述两个方向中的任何一个是否可行。特别是当电子邮件地址可能没有分隔符并且名称可能变化很大时,列表可能不足以找到匹配项。

我应该如何着手解决这个问题?机器学习/深度学习会有所帮助还是我应该使用其他简单的东西,比如正则表达式和模糊字符串匹配?

更新:我有一个数据集,它有两列,电子邮件地址和姓名,那里有大约 2k 行。我相信这可以用于第二个方向(名称提取)。对于第一个方向(字符串比较相似度),我正在考虑将数据集修改为三列(电子邮件地址 1、电子邮件地址 2、他们是否是同一个人的标签),这应该给出大约 1k 行数据。

1个回答

在谈论解决方案之前,您为什么不专注于内容呢?考虑到大多数电子邮件地址都以发件人的签名结尾,我认为解决您的问题会更有帮助,姓氏. 此外,无法从电子邮件地址获取此信息的概率远高于无法从内容获取信息的概率。尤其是公司电子邮件地址可能不包含电子邮件地址中的全名(姓名和姓氏的第一个字母,例如 John Travolta - jtravolta@company.com),但它必须包含作者的全名(至少名称)在最后。此外,考虑到许多电子邮件地址将只包含姓名或姓氏或两者都不包含,而是诸如 superboy122133@+++.com :D 之类的替代词。但大多数电子邮件应用程序都包含一个包含姓名和姓氏的默认标志。此外,您可以将这两种技术结合起来。也就是说,将电子邮件地址数据与电子邮件内容数据相结合,这样,

但是,如果假设您只需要使用电子邮件地址就可以做到这一点,我认为使用机器学习技术会高估或高估问题。此外,使用非机器学习技术并不意味着您正在简化解决方案,所有这些技术在正确的上下文中应用时都会产生最佳结果。让我们想象一个简单的情况:如果您知道或可以轻松推断出 [tax] = 0.2 * [salary] + 20 $,为什么要使用机器学习找到(或拟合)这个等式?

除非你有 |email address, fullname| 格式的数据,否则你不应该从使用机器学习开始。(如果您有 |email address, fullname| 数据作为选项,您将训练一个模型来学习电子邮件地址和全名之间的一般关系,从而识别相似的电子邮件地址)。

但是,在当前情况下,一种方法是在电子邮件地址中查找所有可能的模式。哪个可以

  • 姓名和姓氏的第一个字母 jtravolta@+++.com
  • 姓名、特殊字符和姓氏 john_travolta@+++.com
  • 姓名和号码 john1954@+++.com
  • ...

然后,可以将使用已识别模式从电子邮件地址中提取的这些特征与散列或使用字符串距离算法的其他电子邮件进行比较。

一种替代方法是使用所有可用姓名姓氏的哈希字典,然后您可以从电子邮件地址中剪切片段(子字符串),然后对它们进行哈希处理以从地址中查找姓名和姓氏(当然,反之亦然,效率非常低)。将匹配具有最相似属性的电子邮件地址。

另一种解决方案是,使用上述模式,您可以生成一堆人工电子邮件地址。考虑到很可能没有包含人名和姓氏及其一个或多个电子邮件地址的数据集,数据增强是首要任务。(我不确定数据增强术语是否适合这种情况。如果不适合,那么就说数据生成)。因此,您的输入将是姓氏(您可以包括中间名、数字等),输出将是基于预定义模式的随机生成的电子邮件地址。为单个输入生成的电子邮件数量也应随机选择,但要注意多次生成相同的电子邮件地址。例如输入 -> John Travolta -> 输出 -> j_travolta12@+++.com,

然后,在您创建具有所有可能(几乎)模式的电子邮件地址后,您可以从机器学习技术中获得帮助。因此,该模型可能会为您提供相关姓名和姓氏的概率。(此外,您可以配置输出,以便为您提供概率较高的前 n 个姓名和姓氏)

需要考虑的另一件事是两个不同的人具有相同姓名和姓氏的可能性。最后,与使用哪种方法无关,您的解决方案不可能是完美的,因为例如,无法理解字符“j”代表电子邮件地址中的 John 还是 Jake。因此,如果您可以将电子邮件内容集成到您的解决方案中,那将大大提高性能。

相应地更新:检查这个答案,它不能完全回答你的问题,但上下文是相同的。