原理:
1.使用足够多的垃圾邮件和非垃圾邮件的内容作为训练集
2.读取全部训练集
删除其中的干扰字符
【 】 ,* 。
进行分词
删除长度为 1 的单个字符
3.统计全部训练集中每个有效词汇的出现次数,截取出现次数最多的前 N 个
注:N 可以自己指定
4.根据每个经过第 2 步预处理后的垃圾邮件和非垃圾邮件内容生成特征向量
统计第 3 步中得到的 N 个词语分别在该邮件中的出现频率
每一个邮件对应一个特征向量,特征向量长度为 N
每个分量的值 表示对应的词语 在本邮件中出现的次数
[3,0,0,5] 第一个词语出现 3 次,第四个词出现了 5 次
5.根据第 4 步中得到的特征向量和已知邮件分类创建并训练朴素贝叶斯模型
注:明确哪些是垃圾邮件,哪些不是垃圾邮件
6.读取测试邮件,参考第 2 步,对邮件文本进行预处理,提取特征向量
7.使用第 5 步中训练好的模型,根据第 6 步提取的特征向量对邮件进行分类 程序要点:
1.使用 re 模块下的 sub 替换干扰的符号
from re import sub
2.使用 os 模块下的 listdir 列出所有的记事本文件 .txt
from os import listdir
3.使用 collections 模块下的 Counter 对邮件中字符出现的次数进行统计
from collections import Counter
4.使用 itertools 模块下的 chain 对邮件中字符出现的次数进行统计
from itertools import chain
5.使用 numpy 模块下的 array 将数据输入到模型中,使用数组
from numpy import array
6.使用 jieba 模块下的 cut 对内容进行分词
from jieba import cut
7.使用 sklearn.naive_bayes 模块下的 MultinomialNB 导入朴素贝叶斯
from sklearn.naive_bayes import MultinomialNB
8.删除字符串两边的空白字符(空格,制表符,换行符)
line = line.strip()
9.将其他字符替换为空白字符
line = sub(r'[.【】 0-9、-。,!~\*]','',line)
10.对文本进行分词
line = cut(line)
11.过滤长度为 1 的单个字
line = filter(lambda word:len(word) > 1,line)
filter 函数将大于 1 的保存下来
12.列表添加元素使用 extends
words.extends(line) 程序:
from re import sub
from os import listdir
from collections import Counter
from iteratools import chain
from numpy import cut
from sklearn.naive_bayes import MultinomialNB def getWordsFromFile(txtFile):
# 获取每一封邮件中的所有词语
words = []
# 将所有存储邮件文本内容的记事本文件都使用 UTF8 编码
with open(txtFile,encoding = "utf8") as fp:
for line in fp:
# 遍历每一行,删除两端的空白字符
line = line.strip()
# 过滤掉干扰字符
line = sub(r'[.【】 0-9、-。,!~\*]','',line)
# 对 line 进行分词
line = cut(line)
# 过滤长度为 1 的词
line = filter(lambda word:len(word) > 1 ,line)
# 将文本预处理得到的词语添加到 words 列表中
words.extend(line)
return words

2020-04-11

提取txt文本有效内容的更多相关文章

  1. 关于itext生成pdf的新的demo(包含简单的提取txt文件的内容 和xml内容转化为pdf)

    一.用的iText版本为7.0.2版本,maven的配置如下: <dependencies> <!-- always needed --> <dependency> ...

  2. java操作txt文本(二):删除文本括号内的内容

    想法由来:之前写读书报告时,遇到一些烦人的文献,总喜欢把注释作为括号内容放到正文中,使文章繁琐冗长,所以写了下面这个代码,剔除了括号内的内容. 适用条件:原txt文本中的括号使用正确,即左右括号匹配正 ...

  3. C#提取TXT文档指定内容

    早上有分享一篇<VB.NET提取TXT文档指定内容> http://www.cnblogs.com/insus/p/3267347.html 那是原网友的需求用VB.NET写的.刚才有只懂 ...

  4. Java HashSet对txt文本内容去重(统计小说用过的字或字数)

    Java HashSet对txt文本内容去重(统计小说用过的字或字数) 基本思路: 1.字节流读需要去重的txt文本.(展示demo为当前workspace下名为utf-8.txt的文本) 2.对读取 ...

  5. 如何快速合并多个TXT文本内容

    工作中有时候需要合并很多文本内容,例如一些推送清单之类,一个一个打开去复制粘贴的话,少量还行,如果txt文本数据量大(10+M以上)且文件数量多(成百上千),这种方式就显得很低效了.具体要求如下:   ...

  6. python读取、写入txt文本内容

    转载:https://blog.csdn.net/qq_37828488/article/details/100024924 python常用的读取文件函数有三种read().readline().r ...

  7. 解决windows7搜索不了txt文本内容的问题

    windows7默认的搜索框是只搜索文件名,若是要文件内容的话,需要这样设置: 打开"我的电脑",左上角"组织"→"文件夹和搜索选项"→&q ...

  8. 芝麻HTTP:TXT文本存储

    将数据保存到TXT文本的操作非常简单,而且TXT文本几乎兼容任何平台,但是这有个缺点,那就是不利于检索.所以如果对检索和数据结构要求不高,追求方便第一的话,可以采用TXT文本存储.本节中,我们就来看下 ...

  9. C#提取PPT文本——提取SmartArt中的文本、批注中的文本

    提取文本的情况在工作和学习中常会遇到,在前面的文章中,已经讲述了如何提取PPT中文本框里的文本,在本篇文章中,将介绍如何使用C#代码语言提取PPT文档中SmartArt和批注中的文本.同样的,程序里面 ...

随机推荐

  1. Django快速开发实践:Drf框架和xadmin配置指北

    步骤 既然是快速开发,那废话不多说,直接说步骤: 安装Djagno 安装Django Rest Framework 定义models 定义Rest framework的serializers 定义Re ...

  2. 【PyMuPDF和pdf2image】Python将PDF转成图片

    前言: 在最近的测试中遇到一个与PDF相关的测试需求,其中有一个过程是将PDF转换成图片,然后对图片进行测试. 粗略的试了好几种方式,其中语言尝试了Python和Java,总体而言所找到的Python ...

  3. Error: error getting chaincode bytes: failed to calculate dependencies报错解决办法

    Error: error getting chaincode bytes: failed to calculate dependencies: incomplete package: github.c ...

  4. MySQL数据库的卸载与安装

    MySQL数据库的卸载与安装 MySQL的完全卸载 因为不知道什么原因,电脑里同时存在两个版本的mysql,所以决定卸载重新安装,但是大家都说MySQL很难清除干净,所以特地查找完全卸载MySQL的方 ...

  5. java 面向对象(八):面向对象的特征一:封装性

    面向对象的特征一:封装与隐藏1.为什么要引入封装性?我们程序设计追求“高内聚,低耦合”.高内聚 :类的内部数据操作细节自己完成,不允许外部干涉:低耦合 :仅对外暴露少量的方法用于使用. 隐藏对象内部的 ...

  6. 数据可视化实例(九): 边缘箱形图(matplotlib,pandas)

    https://datawhalechina.github.io/pms50/#/chapter7/chapter7 边缘箱形图 (Marginal Boxplot) 边缘箱图与边缘直方图具有相似的用 ...

  7. python 并发专题(十三):asyncio (二) 协程中的多任务

    . 本文目录# 协程中的并发 协程中的嵌套 协程中的状态 gather与wait . 协程中的并发# 协程的并发,和线程一样.举个例子来说,就好像 一个人同时吃三个馒头,咬了第一个馒头一口,就得等这口 ...

  8. HotSpot VM垃圾收集器

    最常用的HotSpot VM垃圾收集器是分代垃圾收集.该方案是基于两个观察事实. 大多数分配对象的存活时间很短. 存活时间久的对象很少引用存活时间短的对象. 上述两个观察事实统称为弱分代假设(Weak ...

  9. 微信浏览器内 h5 直接唤醒 app 之 微信开放标签 wx-open-launch-app

    以前微信浏览器内想要直接唤醒 app 要么接微信的应用宝要么你是腾讯的干儿子. 而在微信在2020年5月分推出了“微信开放标签”功能 wx-open-launch-app 用于微信浏览器内直接唤醒 a ...

  10. bzoj2295【POJ Challenge】我爱你啊*

    bzoj2295[POJ Challenge]我爱你啊 题意: 求一个字符串中有多少个"luvletter"(不包括引号).字符串长度≤100000. 题解: 连kmp都不用…… ...