如何在Python中匹配电子邮件的名字和姓氏

2024-04-20 00:19:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python非常陌生,在开发这个程序时得到了同行的帮助。我基本上有一个非常粗糙的,动态的scraper,它从给定的URL中提取电子邮件。你知道吗

我一直在考虑如何将名/姓与电子邮件地址进行匹配,并提出将电子邮件中“@”之前的任何4个以上连续字符与网页上的另一个元素进行匹配的想法,前提是大多数企业在创建电子邮件时至少使用名/姓的一部分。我还决定使用4个字符,以避免3+字符可能出现的任何混淆,因为我觉得这不够具体。你知道吗

我希望这不是一个太笼统的问题,我只是不知道从哪里开始。你知道吗

我在思考这个问题时发现的大部分内容都是基于拆分电子邮件和使用regex进行匹配,但我不确定这是否适用于页面本身/如何实现。你知道吗

import urllib.request,re
f = urllib.request.urlopen("http://www.sampleurl.com")
s = f.read().decode('utf-8')
print(re.findall(r"\+\d{2}\s?0?\d{10}",s))
print(re.findall(r"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}",s))

这是一个非常基本的版本的一个更大的程序,但它是大多数的内部工作。它会根据给定的URL正确返回电子邮件和电话号码。你知道吗

from email_split import email_split
import urllib.request,re

#Find Emails
f = urllib.request.urlopen("https://www.sampleurl.com/")
s = f.read().decode('utf-8')
e = (re.findall(r"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}",s))

emails = []

for x in e:
    emails.append(str(x))

#Split Email
email = email_split(x)

str = email.local
match = re.search(r'([\w.-]+)', str)
if match:
    print match.group()

Tags: import程序reurl电子邮件emailrequestmatch
1条回答
网友
1楼 · 发布于 2024-04-20 00:19:53

这是一个一般性的问题,但我马上就想到了。我认为这将是一个三步走的过程:

1)提取网站上的名字。我没有使用它,但是听起来您可以使用spaCy来拉出name实体。然后将它们存储在某种类型的名称列表中。你知道吗

2)提取站点上的所有电子邮件地址,并将其存储在电子邮件地址列表中。你知道吗

3)然后使用fuzzywuzzy遍历这些名称,并找到与电子邮件地址sample of fuzzywuzzy的匹配项

没有一个特定的网站来尝试,这只是理论上的,我创建了一个示例列表来展示我的想法:

from fuzzywuzzy import fuzz
from fuzzywuzzy import process

names = ['John A. Smith', 'Michael Jordan', 'James Thomas', 'Bradley Cooper']

emails = ["jasmith@foo.com", "john.smith@bar.com", "jthomas@foobar.com", "bradc@company.com"]
email_users = [ x.split('@')[0] for x in emails ]

email_dict = dict(zip(email_users, emails))

for name in names:
    matches = process.extract(name, email_users, limit=3)
    print ('%s: ' %name)
    for each in matches:
        if each[1] >= 70:
            print ('\t%-20s - Score: %s' %(email_dict[each[0]], each[1]))
        else:
            continue

输出:

John A. Smith: 
        john.smith@bar.com   - Score: 95
        jasmith@foo.com      - Score: 70
Michael Jordan: 
James Thomas: 
        jthomas@foobar.com   - Score: 77
Bradley Cooper: 
        bradc@company.com    - Score: 72

相关问题 更多 >