提取txt文本有效内容
原理:
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文本有效内容的更多相关文章
- 关于itext生成pdf的新的demo(包含简单的提取txt文件的内容 和xml内容转化为pdf)
一.用的iText版本为7.0.2版本,maven的配置如下: <dependencies> <!-- always needed --> <dependency> ...
- java操作txt文本(二):删除文本括号内的内容
想法由来:之前写读书报告时,遇到一些烦人的文献,总喜欢把注释作为括号内容放到正文中,使文章繁琐冗长,所以写了下面这个代码,剔除了括号内的内容. 适用条件:原txt文本中的括号使用正确,即左右括号匹配正 ...
- C#提取TXT文档指定内容
早上有分享一篇<VB.NET提取TXT文档指定内容> http://www.cnblogs.com/insus/p/3267347.html 那是原网友的需求用VB.NET写的.刚才有只懂 ...
- Java HashSet对txt文本内容去重(统计小说用过的字或字数)
Java HashSet对txt文本内容去重(统计小说用过的字或字数) 基本思路: 1.字节流读需要去重的txt文本.(展示demo为当前workspace下名为utf-8.txt的文本) 2.对读取 ...
- 如何快速合并多个TXT文本内容
工作中有时候需要合并很多文本内容,例如一些推送清单之类,一个一个打开去复制粘贴的话,少量还行,如果txt文本数据量大(10+M以上)且文件数量多(成百上千),这种方式就显得很低效了.具体要求如下: ...
- python读取、写入txt文本内容
转载:https://blog.csdn.net/qq_37828488/article/details/100024924 python常用的读取文件函数有三种read().readline().r ...
- 解决windows7搜索不了txt文本内容的问题
windows7默认的搜索框是只搜索文件名,若是要文件内容的话,需要这样设置: 打开"我的电脑",左上角"组织"→"文件夹和搜索选项"→&q ...
- 芝麻HTTP:TXT文本存储
将数据保存到TXT文本的操作非常简单,而且TXT文本几乎兼容任何平台,但是这有个缺点,那就是不利于检索.所以如果对检索和数据结构要求不高,追求方便第一的话,可以采用TXT文本存储.本节中,我们就来看下 ...
- C#提取PPT文本——提取SmartArt中的文本、批注中的文本
提取文本的情况在工作和学习中常会遇到,在前面的文章中,已经讲述了如何提取PPT中文本框里的文本,在本篇文章中,将介绍如何使用C#代码语言提取PPT文档中SmartArt和批注中的文本.同样的,程序里面 ...
随机推荐
- Nacos配置中心原理
动态配置管理是 Nacos 的三大功能之一,通过动态配置服务,我们可以在所有环境中以集中和动态的方式管理所有应用程序或服务的配置信息. 动态配置中心可以实现配置更新时无需重新部署应用程序和服务即可使相 ...
- Spring Boot Web应用开发 CORS 跨域请求支持
一.Web开发经常会遇到跨域问题,解决方案有:jsonp,iframe,CORS等等 CORS与JSONP相比 1. JSONP只能实现GET请求,而CORS支持所有类型的HTTP请求. 2. 使用C ...
- springMVC中的HttpSession与Model
目录 1.1 spring的@MODELATTRIBUTE 2.1 session的概念 3.1 示例 4.1 为什么springmvc框架要使用model这个对象呢? 突然发问:相信很多人在做WEB ...
- 相邻元素之间的margin合并问题
任何元素都可以设置border 设置宽高可能无效 行内元素设置padding,margin上下是无效的,左右是有效的 外边距合并:指的是,当两个垂直外边距相遇时,它们将形成一个外边距. 合并后的外边距 ...
- vue.js之常操作(实例)
听说大家都开始用react.vue这些MVVM框架了,为了不落后,还是学学吧!(之前只对angular了解一点,时间一长,也忘得差不多了,所以学习vue相当于从小白开始) 从vue.js官网看一下,先 ...
- 如何查询到你的wifi所在的公网ip?
浏览器中输入:ip138.com 即可查询到.
- day64 django模型层
目录 一.单表操作(增删改) 二.必知必会13个方法 三.查看内部的sql语句的方法 四.神奇的双下划线查询 五.一对多外键的增删改查 六.多对多外键的增删改查 七.正反向查询概念 八.多表查询 1 ...
- [网鼎杯 2020 青龙组]AreUSerialz
题目分析 <?php include("flag.php"); highlight_file(FILE); class FileHandler { protected $op ...
- 精通java并发-synchronized关键字和锁
目前CSDN,博客园,简书同步发表中,更多精彩欢迎访问我的gitee pages synchronized关键字和锁 示例代码 public class MyThreadTest2 { public ...
- 一个HashMap能跟面试官扯上半个小时
一个HashMap能跟面试官扯上半个小时 <安琪拉与面试官二三事>系列文章 一个HashMap能跟面试官扯上半个小时 一个synchronized跟面试官扯了半个小时 一个volatile ...