之前写Python Web小书第三小节本来用的垃圾邮件的案例三郎:Python贝叶斯推理垃圾邮件分类​zhuanlan.zhihu.com

后来发现里面的东西,涉及到概率,程序太复杂了。。。哈哈哈

所以就想着,哪天重写一下,选来选去,觉得垃圾邮件分类里面的单词统计,可以深入给大家好好讲讲这个小案例。

这里选用的是一部英文哈利波特小说第一部:3496行,443725个字符

下面我们开始捋思路,我们拿到的是一部有很多单词和符号的小说,我们要做的事就是要对所有的单词出现的次数进行统计。

第一步,先读出整部小说的内容

第二步,对小说的内容进行清洗,只保留所有的单词

第三步,构建字典,遍历所有单词,进行次数统计

是不是感觉好简单,那我们上路吧!!!!!!!

首先我们先读取小说的全部内容

fp = open("HarryPotter1.txt",'r')#文件名,r为读模式

print(fp.read())

打印输出如下

我们要把上图里面的这些符号干掉,有没有什么好办法呢,当然有啦,这就要用到我们的正则表达式,代码如下:

import re

fp = open("HarryPotter1.txt",'r')

content = re.sub('\W',' ',fp.read())#第一个参数\W和第二个参数空格的意思是替换所有非字符为空格

print(content)

同时,我们发现一个单词如果在句首字母会大写,比如The和the如果不处理会被理解为两个词汇。于是我们继续更新代码

import re

fp = open("HarryPotter1.txt",'r')

content = re.sub('\W',' ',fp.read())

content = content.lower()

print(content)

到现在为止,我们对初始文本做了过滤标点符号和统一大小写的预处理,下面就是把这个文本分割为一个个单词,代码如下

import re

fp = open("HarryPotter1.txt",'r')

content = re.sub('\W',' ',fp.read())

content = content.lower()

content = content.split()

print(content)

现在我们得到一个包含所有单词的列表,下面就可以进行单词统计了,首先生成空字典word_counter,然后循环遍历整个单词列表进行词数统计

import re

fp = open("HarryPotter1.txt",'r')

content = re.sub('\W',' ',fp.read())

content = content.lower()

content = content.split()

word_counter = {}

for word in content:

if word in word_counter:

word_counter[word]+=1

else:

word_counter[word]=1

print(word_counter)

因为上面看起来很别扭,我想按照顺序,一行行打印,于是我试着做如下操作

import re

fp = open("HarryPotter1.txt",'r')

content = re.sub('\W',' ',fp.read())

content = content.lower()

content = content.split()

word_counter = {}

for word in content:

if word in word_counter:

word_counter[word]+=1

else:

word_counter[word]=1

for (key,value) in word_counter:

print(key,value)

结果,报错,因为Dict不能同时对key和value同时遍历,所以有三种方式

#1.遍历键,然后索引到值

for key in word_counter:

print(key+':'+word_counter[key])

for key in word_counter.keys():

print(key+':'+word_counter[key])

#2.遍历值

for value in word_counter.values():

print(value)

#3.遍历字典项

for kv in word_counter.items():

print(kv)

for key,value in word_counter.items():

print(key+':'+value)

于是,需要将字典转化为列表,也就有了如下代码

import re

fp = open("HarryPotter1.txt",'r')

content = re.sub('\W',' ',fp.read())

content = content.lower()

content = content.split()

word_counter = {}

for word in content:

if word in word_counter:

word_counter[word]+=1

else:

word_counter[word]=1

for (key,value) in word_counter.items():

print(key,value)

因为控制台太短,无法全部显示,所以我们保存到文件处理,而且我们关注的字数统计,更核心的是哪些词出现的更多,于是有了如下代码

import re

fp = open("HarryPotter1.txt",'r')

content = re.sub('\W',' ',fp.read())

content = content.lower()

content = content.split()

word_counter = {}

for word in content:

if word in word_counter:

word_counter[word]+=1

else:

word_counter[word]=1

sort_items = sorted(word_counter.items(),key=lambda d:d[1],reverse=True)

fp=open("result.txt","w")

for (key,value) in sort_items:

fp.write(key+" "+str(value)+"\n")

然后我们要注意,文件操作,打开一定要关闭,这里用到自动关闭的with语句,于是最终的代码,加了注释后如下

import re#正则表达式

#open函数打开文件会得到一个文件对象fp,'r'读文件

with open("HarryPotter1.txt",'r') as fp:

#用正则表达式对文件内容里的标点符号全部清理掉

content = re.sub('\W',' ',fp.read())

#将所有单词的大写转化为小写,方便我们统一处理

content = content.lower()

#split分割所有的单词,默认是用空格做分割点

#得到了一个单词列表

content = content.split()

#我们定义一个空字典,来保存我们的单词和统计次数

word_counter = {}

#对单词列表做遍历循环每个单词

for word in content:

#如果字典里出现了这个单词,那就次数加1

if word in word_counter:

word_counter[word]+=1

#如果没出现过,那就次数赋值初始化为1

else:

word_counter[word]=1

#依据每个单词出现的次数,我们来对整个单词表做排序

sort_items = sorted(word_counter.items(),key=lambda d:d[1],reverse=True)

print(sort_items)

#我们为了方便后面查阅,要把排序好的结果保存的文件里

#新建一个文件,以"w"写文件的模式打开这个文件

with open("result.txt","w") as fp:

#循环遍历我们已经排序好的单词统计次数的列表

for (key,value) in sort_items:

#每个单词和统计次数,按照行写入到我们的文件里

fp.write(key+" "+str(value)+"\n")

旅程结束,希望能够帮到你!

python统计英文句子每个单词字数_Python小书3-文本英文单词统计相关推荐

  1. python统计英文句子每个单词字数_Python实现的统计文章单词次数功能示例

    本文实例讲述了Python实现的统计文章单词次数功能.分享给大家供大家参考,具体如下: 题目是这样的:你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都是英文,请统计出你认 ...

  2. python统计句子中单词个数_python练习:一行搞定-统计一句话中每个单词出现的个数...

    原博文 2018-10-04 19:42 − 一行搞定-统计一句话中每个单词出现的个数 >>> s'i am a boy a bood boy a bad boy' 方式一:> ...

  3. Java编程之统计英文句子中单词个数、不同单词和重复单词个数

    一.题目 从键盘输入一个英文句子,统计该句子中的英文单词个数,并找出所有单词存放到一个数组中.同时,输出该句子中的不同单词和重复单词以及它们的个数. 二.实验代码 package fighting; ...

  4. python英文文本词频统计代码_Python小程序:文本词频统计(英文+中文)

    在学习了组合数据类型和文件操作之后就可以做出下面的文本词频统计的小程序了: 1. 下面是英文文本的词频统计,统计了作者的一篇英文论文 #文本词频统计:英文文本 def gettext(): #从文件中 ...

  5. python统计句子中单词个数_Python练习第三题,统计单词个数

    ^第三题:一个英文的纯文本文件,统计其中的单词出现的个数. 统计什么好呢,就拿Python彩蛋import this来试试吧.(将下列单词保存为"test.txt")>> ...

  6. java统计每个单词单词出现的次数_Java统计英文句子中出现次数最多的单词并计算出现次数的方法...

    本文实例讲述了Java统计英文句子中出现次数最多的单词并计算出现次数的方法.分享给大家供大家参考,具体如下: import java.util.*; /** * 统计出现次数最多的单词和它出现的次数 ...

  7. 统计英文句子中的单词个数,并且输出每个单词

    package new_test; import java.util.Scanner; import java.util.StringTokenizer; //任务:统计英文句子中的单词个数,并且输出 ...

  8. java 单词出现次数_Java统计英文句子中出现次数最多的单词并计算出现次数的方法...

    搜索热词 本文实例讲述了Java统计英文句子中出现次数最多的单词并计算出现次数的方法.分享给大家供大家参考,具体如下: import java.util.*; /** * 统计出现次数最多的单词和它出 ...

  9. 输入一段英文句子,单词之间用若干空格隔开,将每个单词的首字母转换为大写字母。 例如,“I am very glad to see you”的转换结果为“I Am Very Glad To See Yo

    输入一段英文句子,单词之间用若干空格隔开,将每个单词的首字母转换为大写字母. 例如,"I am very glad to see you"的转换结果为"I Am Very ...

最新文章

  1. 使用Uboot启动内核并挂载NFS根文件系统
  2. C语言 用代码将10进制转换为2进制表示
  3. android 之四大组件的Activity详解
  4. ubuntu 12.04 php mysql_Ubuntu 12.04下LAMP安装配置
  5. web前端面试问答_Web服务面试问答
  6. oracle 备份导出,oracle 怎么备份或导入导出表
  7. 4.3.1 jQuery基础(1)
  8. PHP中return的用法
  9. 【知乎】神回答,我们吐的不是槽 233
  10. 测试工程方法:判定表驱动法
  11. ArcGIS 创建格网与图斑数据叠加;频数统计与面积比例计算
  12. 解决Win10任务栏不显示电池电量的问题
  13. 亲完如何进行下一步_接吻进阶指南,提出接吻,亲吻技巧,约会后怎么接吻
  14. 分而治之(Work Breakdown Structure, WBS)
  15. 关于提高游戏中的打击感
  16. 桥接模式和装饰者模式的区别及理解
  17. CANopen--基于DS402协议的伺服电机原点回零模式
  18. 向量的相似度计算常用方法
  19. 【论文分享】★★★「SOTA」小样本图神经网络分类模型 HGNN:Hybrid Graph Neural Networks for Few-Shot Learning
  20. CSS颜色的四种写法

热门文章

  1. Flask 中内置的 Session
  2. 二叉搜索树的插入与删除图解
  3. 华为EC169 3G卡在Win7下的安装
  4. nodejs开发 过程中express路由与中间件的理解 - pyj063 - 博客园
  5. Vue-router 中hash模式和history模式的区别
  6. 算法 --- 反转数组
  7. es6 --- promise.prototype.then的链式引用
  8. export和export default的区别
  9. Linux学习-11月12日(Apache安装)
  10. opengl微发展理解