能否用ML/NLP与Python识别邮箱用户名生成模式并统计导出?
解决方案:识别邮箱命名模式并导出至Excel
核心思路
先提取邮箱@符号前的本地部分,再与对应的名、姓做对比,归纳出常见的命名模式(如首字母组合、缩写+全拼等),统计每种模式的受众数量,最后将结果导出至Excel表格。
实现步骤及代码示例
1. 安装依赖库
需要用到pandas处理数据和导出Excel,collections统计模式数量:
pip install pandas
2. 数据处理与模式识别
以下是完整的可运行代码,包含模式匹配逻辑:
import pandas as pd from collections import defaultdict # 替换为你的实际数据集 data = { 'First Name': ['John', 'Emily', 'Harry', 'Michael', 'Sarah'], 'Last Name': ['Jacobs', 'Queens', 'Smith', 'Brown', 'Miller'], 'Email': ['jj@xyz.com', 'eq@pqr.com', 'hsm@abc.com', 'mb@def.com', 'sm@ghi.com'] } df = pd.DataFrame(data) # 定义模式匹配函数 def get_email_pattern(row): fn = row['First Name'].lower() ln = row['Last Name'].lower() local_part = row['Email'].split('@')[0].lower() # 匹配常见模式,可根据实际情况扩展 if local_part == f"{fn[0]}{ln[0]}": return "名首字母+姓首字母" elif local_part == f"{fn[0]}{ln}": return "名首字母+完整姓" elif local_part == f"{fn}{ln[0]}": return "完整名+姓首字母" elif local_part == f"{ln[0]}{fn[0]}": return "姓首字母+名首字母" elif local_part == f"{fn[:2]}{ln[:1]}": return "名前两位+姓首字母" else: return "其他模式" # 为每条数据标记对应模式 df['Pattern'] = df.apply(get_email_pattern, axis=1) # 统计每种模式的数量 pattern_count = df['Pattern'].value_counts().reset_index() pattern_count.columns = ['模式', '数量'] # 收集每种模式的示例 pattern_samples = defaultdict(list) for _, row in df.iterrows(): pattern_samples[row['Pattern']].append(f"{row['First Name']} {row['Last Name']}: {row['Email']}") # 将示例合并到统计结果中 pattern_count['示例'] = pattern_count['模式'].apply(lambda x: '; '.join(pattern_samples[x]))
3. 导出至Excel
使用pandas直接导出统计结果:
# 导出到Excel文件 pattern_count.to_excel('邮箱模式统计结果.xlsx', index=False) print("统计结果已成功导出至Excel!")
扩展说明
- 代码中的模式判断逻辑可以根据你的数据集特点扩展,比如增加“完整名+完整姓”“姓全拼+名首字母”等更多模式。
- 如果数据集规模较大,可将
apply方法替换为向量化操作提升运行效率。
内容的提问来源于stack exchange,提问作者Ravi Singh
相关产品推荐
相关产品推荐

