垃圾邮件分类(trec06c数据集)数据处理-特征提取

目录

目标:我要提取 发件人(From)、收件人(To)、邮件主题(Subject)、邮件正文(zhengwen) 作为邮件特征,然后输入到线性分类模型中进行训练

首先是这四个特征提取的部分

发件人

收件人

邮件主题

邮件正文

获取 标签--路径 对照表

把这一部分的全部的代码放这儿:

~~~~~~~~~~~待更新~~~~~~~~~~~~~~~~~~~~~~~~~~~


数据集是这样的 

data里是数据文件

full里是index文件,存放哪个路径的文件是什么类型

index文件 (类型--文件路径 对照表)

目标:我要提取 发件人(From)、收件人(To)、邮件主题(Subject)、邮件正文(zhengwen) 作为邮件特征,然后输入到线性分类模型中进行训练

首先是这四个特征提取的部分

发件人

通过上面的邮件的图,可以看到From、Subject中有用gb2312和base64编码的部分,需要进行解码

另外 如果多打开几个文件可以观察到 From字段的情况比较复杂,我观察到了这四种(列在下面),其实可能不止这四种格式

From: wei@13.com
From: "yan"<(8月27-28,上海)培训课程>
From: ke@163.com" <chunyang-sz@163.com>
From: =?GB2312?B?zuLmw+bD?= <hou@163.com>

我做的处理步骤大体如下:

 解码部分优先用gb2312解 ,如果报异常 就在用gbk解,如果还是报异常,就直接赋空串

def From_email(email): # email是整封邮件的内容字符串
    # 发件人
    # 先提取From后的所有内容
    try:
        From_raw = re.search(r'From: (.*)', email).group(1)
    except:
        From_raw = ''
    From = ''
    # 先看看有没有加密部分 有加密部分就给他解密
    name = re.search(r'=\?GB2312\?B\?(.*)\?=', From_raw, re.I)  # name保存加密部分
    if name is None:  # 没有加密部分
        name = ''
        # 没有加密部分 就保留串的所有内容
        From = From_raw
    else:  # 有加密部分
        name = name.group(1)
        try:
            name = base64.b64decode(name).decode('gb2312')
        except:
            try:
                name = base64.b64decode(name).decode('gbk')
            except:
                name = ''
        From = name + re.search(r'\?=(.*)', From_raw).group(1)
    # print('From: ', From)
    return From

收件人

存在以TO: 开头的情况,加个re.I 就不区分大小写了

def To_email(email):
    # 收件人
    To = re.search(r'^To: (.*)', email, re.M | re.I).group(1)  # re.M 从每行文本开头的位置开始匹配
    # print('To: ', To)
    return To

邮件主题

处理这个字段的流程基本和From字段一样,Subject的格式比较统一,基本都是加密形式

def Subject_email(email):
    # 主题
    Subject = re.search(r'=\?gb2312\?B\?(.*)\?=', email)
    if Subject is None:
        Subject = ''
    else:  # subject 有内容
        Subject = Subject.group(1)
        Subject = base64.b64decode(Subject)  # 解密
        try:
            Subject = Subject.decode('gb2312')  # 解码
        except:
           
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值