基于jieba、TfidfVectorizer、LogisticRegression的垃圾邮件分类

这篇博客介绍了如何利用jieba进行中文分词,结合TfidfVectorizer转换文本数据,并使用LogisticRegression进行垃圾邮件分类。作者通过数据下载、预处理、模型训练和评估,展示了整个流程,最终模型在测试集上的表现优秀。
摘要由CSDN通过智能技术生成

2018年9月27日笔记

jieba中文叫做结巴,是一款中文分词工具,官方文档链接:https://github.com/fxsjy/jieba
TfidfVectorizer中文叫做___ 词频逆文档频率向量化模型,是用来文章内容向量化的工具,官方文档链接:http://sklearn.apachecn.org/cn/0.19.0/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html
LogisticRegression中文叫做
逻辑回归模型___,是一种基础、常用的分类方法。

建议读者安装anaconda,这个集成开发环境自带了很多包。
到2018年9月27日仍为最新版本的anaconda下载链接: https://pan.baidu.com/s/1pbzVbr1ZJ-iQqJzy1wKs0A 密码: g6ex
官网下载地址:https://repo.anaconda.com/archive/Anaconda3-5.2.0-Windows-x86_64.exe
下面代码的开发环境为jupyter notebook,使用在jupyter notebook中的截图表示运行结果。

0.打开jupyter

在桌面新建文件夹命名为基于TfidfVectorizer的垃圾分类,如下图所示:

10345471-0055ed865a643225.png
image.png

打开 基于TfidfVectorizer的垃圾邮件分类文件夹,在按住Shift键的情况下,点击鼠标右键,出现如下图所示。
选择 在此处打开PowerShell窗口,之后会在此路径下打开PowerShell。
10345471-5e18b63cb4bc0a66.png
image.png

在PowerShell中输入命令并运行: jupyter notebook
10345471-345147fa44dc6d19.png
image.png

PowerShell运行命令后,会自动打开网页,点击如下图所示网页中的按钮:
10345471-cbb4a0859de0e2d0.png
image.png

spam中文叫做 垃圾邮件
代码文件重命名为 spamMailTest,重命名按钮位置如下图所示:
10345471-07746cd420085edf.png
image.png

1.数据下载

数据文件下载链接: https://pan.baidu.com/s/1kqOFq8Ou_2D3fIKp0l62qQ 提取码: eu5x
压缩文件trec06c.zip当中含有64000多个包含邮件内容的文本文件。
使用软件Winrar无法解压,使用软件7zipBandizip可以解压,需要3分钟左右。
选择解压到trec06c,如下图所示:

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
当然可以,以下是一个简单的基于朴素贝叶斯算法的中文垃圾邮件分类代码示例: ```python import jieba import os # 垃圾邮件文件夹路径 spam_path = 'spam/' # 非垃圾邮件文件夹路径 ham_path = 'ham/' # 停用词文件路径 stopwords_path = 'stopwords.txt' # 加载停用词 stopwords = set() with open(stopwords_path, 'r', encoding='utf-8') as f: for line in f: stopwords.add(line.strip()) # 获取所有邮件内容及标签 emails = [] for filename in os.listdir(spam_path): with open(spam_path + filename, 'r', encoding='utf-8') as f: content = f.read() emails.append((content, 1)) for filename in os.listdir(ham_path): with open(ham_path + filename, 'r', encoding='utf-8') as f: content = f.read() emails.append((content, 0)) # 分词,并去除停用词 def cut_words(content): words = jieba.cut(content) return [word for word in words if word not in stopwords] # 统计词频 def count_words(words): word_count = {} for word in words: word_count[word] = word_count.get(word, 0) + 1 return word_count # 计算每个词在垃圾邮件和非垃圾邮件中的出现次数 spam_word_count = {} ham_word_count = {} spam_total_count = 0 ham_total_count = 0 for email in emails: words = cut_words(email[0]) if email[1] == 1: spam_total_count += 1 for word in words: spam_word_count[word] = spam_word_count.get(word, 0) + 1 else: ham_total_count += 1 for word in words: ham_word_count[word] = ham_word_count.get(word, 0) + 1 # 计算每个词在垃圾邮件和非垃圾邮件中的出现概率 p_word_spam = {} p_word_ham = {} for word in set(list(spam_word_count.keys()) + list(ham_word_count.keys())): p_word_spam[word] = (spam_word_count.get(word, 0) + 1) / (spam_total_count + 2) p_word_ham[word] = (ham_word_count.get(word, 0) + 1) / (ham_total_count + 2) # 定义分类函数 def classify(content): words = cut_words(content) p_spam = 1 p_ham = 1 for word in words: p_spam *= p_word_spam.get(word, 1) p_ham *= p_word_ham.get(word, 1) if p_spam > p_ham: return '垃圾邮件' else: return '非垃圾邮件' # 测试分类函数 with open('test.txt', 'r', encoding='utf-8') as f: content = f.read() classification = classify(content) print(classification) ``` 在代码中,我们首先加载停用词,并使用jieba分词对邮件内容进行处理。然后使用朴素贝叶斯算法统计每个词在垃圾邮件和非垃圾邮件中的出现次数和出现概率。最后定义了一个分类函数,用于对新邮件进行分类。运行测试代码可以得到分类结果。当然,为了获得更好的分类效果,你可能需要更多的训练数据和调整模型参数。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值