zoukankan      html  css  js  c++  java
  • 机器学习11 12.朴素贝叶斯-垃圾邮件分类

    1. 读邮件数据集文件,提取邮件本身与标签。

    列表

    numpy数组代码:

    import csv
    file_path =r"SMSSpamCollection"
    sms= open(file_path,'r',encoding='utf-8')
    data=csv.reader(sms,delimiter = "	")
    for i in data:
        print(i)
    sms.close()

    2.邮件预处理

    • 邮件分句
    • 名子分词
    • 去掉过短的单词
    • 词性还原
    • 连接成字符串
    •  传统方法来实现
    •  nltk库的安装与使用

    pip install nltk

    import nltk

    nltk.download()     # sever地址改成 http://www.nltk.org/nltk_data/

    https://github.com/nltk/nltk_data下载gh-pages分支,里面的Packages就是我们要的资源。

    将Packages文件夹改名为nltk_data。

    网盘链接:https://pan.baidu.com/s/1iJGCrz4fW3uYpuquB5jbew    提取码:o5ea

    放在用户目录。

    ----------------------------------

    安装完成,通过下述命令可查看nltk版本:

    import nltk
    print nltk.__doc__

    2.1 nltk库 分词

    nltk.sent_tokenize(text) #对文本按照句子进行分割

    nltk.word_tokenize(sent) #对句子进行分词

    2.2 punkt 停用词

    from nltk.corpus import stopwords

    stops=stopwords.words('english')

    *如果提示需要下载punkt

    nltk.download(‘punkt’)

    或 下载punkt.zip

    https://pan.baidu.com/s/1OwLB0O8fBWkdLx8VJ-9uNQ  密码:mema

    复制到对应的失败的目录C:UsersAdministratorAppDataRoaming ltk_data okenizers并解压。

    2.3 NLTK 词性标注

    nltk.pos_tag(tokens)

    2.4 Lemmatisation(词性还原)

    from nltk.stem import WordNetLemmatizer

    lemmatizer = WordNetLemmatizer()

    lemmatizer.lemmatize('leaves') #缺省名词

    lemmatizer.lemmatize('best',pos='a')

    lemmatizer.lemmatize('made',pos='v')

    一般先要分词、词性标注,再按词性做词性还原。

    2.5 编写预处理函数

    def preprocessing(text):

    sms_data.append(preprocessing(line[1])) #对每封邮件做预处理

     import nltk

    nltk.download()
    from nltk.corpus import stopwords
    from nltk.stem import WordNetLemmatizer
    import csv
     
    # 邮件预处理
    def preprocessing(text):
        # 分词
        tokens = [word for sent in nltk.sent_tokenize(text) for word in nltk.word_tokenize(sent)]
        # 停用词
     
        stops = stopwords.words("english")  # 构建停用器
        tokens = [token for token in tokens if token not in stops]
        # 词性标注
        nltk.pos_tag(tokens)
        # 词性还原Lemmatisation
        lemmatizer = WordNetLemmatizer()  # 定义还原对象
        tokens = [lemmatizer.lemmatize(token, pos='n'for token in tokens]  # 名词还原
        tokens = [lemmatizer.lemmatize(token, pos='v'for token in tokens]  # 动词还原
        tokens = [lemmatizer.lemmatize(token, pos='a'for token in tokens]  # 形容词还原
        return tokens  # 返回处理结果
     
    sms = open("data/SMSSpamCollection"'r', encoding='utf-8')  # 数据读取
    sms_data = []  # 邮件内容
    sms_label = []  # 邮件标题
    csv_reader = csv.reader(sms, delimiter=' ')
    # 对每封邮件进行预处理
    for line in csv_reader:
        sms_label.append(line[0])  # 获取标题
        sms_data.append(preprocessing(line[1]))  # 获取处理后邮件数据
    sms.close()  # 关闭读取流
    print("lable内容: ", sms_label)  # 标题
    print("data内容:")  # 处理后的邮件内容
    for in sms_data:
        print(i)

  • 相关阅读:
    三大主流负载均衡软件对比(LVS+Nginx+HAproxy)
    nginx 提示the "ssl" directive is deprecated, use the "listen ... ssl" directive instead
    centos安装nginx并配置SSL证书
    hadoop创建目录文件失败
    The server time zone value 'EDT' is unrecognized or represents more than one time zone.
    脚本启动SpringBoot(jar)
    centos做免密登录
    数据库远程连接配置
    Bash 快捷键
    TCP三次握手四次断开
  • 原文地址:https://www.cnblogs.com/longlog/p/12923894.html
Copyright © 2011-2022 走看看