在文本处理中,我们经常需要对文本中的单词出现频率做一个统计,本文以英文小说《瓦尔登湖》为例,统计一下作者最喜欢用什么单词,他们各自的出现频率如何。

首先需要《瓦尔登湖》的文本:点击下载《瓦尔登湖》(https://pan.baidu.com/s/1o75GKZ4)


思路分析:

  1. 首先,要打开文件,把里面的内容写到字符串里面。
  2. 接着,要对字符串进行分词,分割成独立的单词。
  3. 最后,根据每个单词进行词频统计。

把下载好的“Walden.txt”放到桌面,复制一下完整的路径名,特别注意:

Windows系统下,默认的文件名路径子级和父级之间可能是用反斜杠“ \ ”表示的,而在Python中,子级和父级之间用正斜杠“ / ”表示。

文件打开的时候,如果出现以下错误:

UnicodeDecodeError: 'gbk' codec can't decode byte 0xbf in position 2: illegal multibyte sequence

说明文件编码格式异常,解决办法:在文件打开的语句中添加 encoding = ' utf-8 ',注意添加在open( )函数的最后。

with open(path,'r') as text:
# 添加utf-8编码支持,原语句改为:
with open(path,'r',encoding='utf-8') as text:

使用stringlist.split()函数进行分词,使用stringlist.count()函数进行统计词频

代码如下:

path = 'C:/Users/xiaokai/Desktop/Walden.txt'with open(path,'r',encoding='utf-8') as text:    # 读入文本words = text.read().split()                  # 开始分词print(words)for word in words:print('{}--{} times'.format(word,words.count(word)))    # 把单词和词频分别打印出来

运行结果

tried.--1 times
Whatever--4 times
have--660 times
been--167 times
thy--23 times
failures--3 times
hitherto,--1 times
"be--1 times

分析问题:

发现输出有点怪异,出现了 “tried. ”,“hitherto,” 这样的单词,还有更多的问题:

  1. 单词前后跟了“,”,“.”,“?”等各种各样的符号。
  2. 有许多单词被重复统计了。
  3. 有一些单词,例如‘“Some”和“some”是同一个单词,但是因为“Some”首字母大写也被认为是两个单词。

因此作出更多的改进:

  1. 去掉首尾连在一起的字符串,并且全部转换成小写字母。
  2. 创建一个单词集合,集合的性质保证了不会出现重复的单词,确保不会出现重复统计单词的现象。
  3. 创建一个字典,key为文本里出现的单词,value为单词在文本中出现的频率。
  4. 在字典中,根据词频顺序打印键值对。

改进之后的代码如下:

import stringwith open(path,'r',encoding='utf-8') as text:# 1. 首先进行分词raw_words = text.read().split()# 2. 把每个单词首尾连在一起的符号去掉,大写字母统一成小写words_list = [word.strip(string.punctuation).lower() for word in raw_words]# 3. 数据结构转换成集合,这里重复的单词会被自动丢弃words_set = set(words_list)# 4. 创建字典键值对:key为单词,value为单词出现的频率# 冒号左边为单词,冒号右边为词频words_dict = {keyword:words_list.count(keyword) for keyword in words_set}# 5. 根据words_dict中value的值对字典进行排序输出# 这里采用了lambda表达式,lambda word: word[1]表示输入一个word词条,返回word[1](词频)
# word是一个词条,word[0]是单词,word[1]是单词出现的频率for word in sorted(words_dict.items(), key = lambda word: word[1], reverse = True):print('{}--{} times'.format(word[0],word[1]))

代码解释:

  • strip()函数的作用是去除单词首尾的符号,其中string.punctuation就是一个字符集,包含!@#¥%&*等符号,使用strip(string.punctuation)可以去除首尾的这些符号。
  • word.lower()函数把字母全部转换成小写。
  • sorted()函数对字典进行排序,默认对key进行排序,但这里对value进行排序,所以这里使用lambda表达式,在key = lambda word: word[1]中,返回值是word[1],也就是words_dict中的value。

参考博客:

Python strip()方法 | 菜鸟教程
http://www.runoob.com/python/att-string-strip.html

python字典按照value进行排序 - ketchup_酱 - 博客园
https://www.cnblogs.com/timtike/p/6562402.html

用Python统计瓦尔登湖的词频相关推荐

  1. 如何用python统计英语文章词频?

    如何用python统计英语文章词频? **环境:**python3.0 需要统计的词频的txt文件(无中文) tips:word文档中一键替换中文([一-龥]) 代码如下 file = open('F ...

  2. python统计段落单词词频_使用Python统计文件中词频,并且生成词云

    wordcloud Table of Contents 1 怎样使用Python产生词云 from wordcloud import WordCloud import matplotlib.pyplo ...

  3. python统计英文文本词频和提取文本关键词

    统计一段英文的词频,以下代码只将标点符号省去,没有去除英文中介词,数词,人称代词等,如需要改进在统计时候直接去除相应词汇即可. #读取文本 txt = open("english.txt&q ...

  4. 用python统计英文文章词频

    import rewith open("text.txt") as f:#读取文件中的字符串txt = f.read()#去除字符串中的标点.数字等txt = re.sub('[, ...

  5. python统计词频瓦尔登湖_1.5 python文件操作

    1.5.1 文件的具体操作 打开文件 f = open('test.txt', 'w') 在python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件: open(文件名,访问模式 ...

  6. python统计词频_Python统计四六级考试的词频

    Python统计四六级考试的词频 此文首发于公众号 「Python知识圈」, 欢迎直接去公众号查看 阅读文本大概需要 4.6 分钟. 今天是教师节,先祝天下所有老师教师节快乐,感谢您在我学生时代对我的 ...

  7. python 英语词频统计软件_Python实现统计英文文章词频的方法分析

    本文实例讲述了Python实现统计英文文章词频的方法.分享给大家供大家参考,具体如下: 应用介绍: 统计英文文章词频是很常见的需求,本文利用python实现. 思路分析: 1.把英文文章的每个单词放到 ...

  8. python 统计英文词频

    python 统计英文词频 (以1986-2017年考研英语真题为例) 运行截图: 代码: import re #除去简单词.序号等 excludes = ['the', 'of', 'to', 'a ...

  9. python英文词频统计-Python实现统计英文文章词频的方法分析

    本文实例讲述了Python实现统计英文文章词频的方法.分享给大家供大家参考,具体如下: 应用介绍: 统计英文文章词频是很常见的需求,本文利用python实现. 思路分析: 1.把英文文章的每个单词放到 ...

最新文章

  1. 算法笔记-归并排序、归并排序时间复杂度、例题
  2. Apache TinkerPop毕业成为顶级项目
  3. git submodule 删除及更新URL
  4. UA OPTI512R 傅立叶光学导论16 Nyquist-Shannon采样定理
  5. LeetCode 罗马数字与阿拉伯数字的转换
  6. linux关闭开发者模式的命今,CentOS防火墙用命令行方式关闭的方式
  7. mysql安装包及安装教程(附网盘地址)
  8. MATLAB 计算点到直线的距离
  9. CAN总线协议以及概念
  10. 用计算机实测技术研究声波和拍内容,大学物理实验
  11. python不定积分教学_python 求定积分和不定积分示例
  12. 浅谈Java的类和封装
  13. Swiper参数说明(swiper参数配置)
  14. 【JAVAFX UI欣赏 之 滑条频谱】
  15. oracle 70个常用函数
  16. I'm coming now.
  17. python中函数定义的关键字_python中定义函数的关键字是什么
  18. java计算机毕业设计web家庭财务管理系统MyBatis+系统+LW文档+源码+调试部署
  19. 【JavaSE】入门概述(1~41)
  20. 彭适辰 - 资本寒冬:给创业者的十点建议

热门文章

  1. Netty工作笔记0023---NIO服务器客户端总结
  2. Android学习笔记---开发与运行(卸载)第一个ANDROID应用--Helloworld
  3. librdkafka 安装
  4. python编程(编写opengl程序)
  5. linux终端 介绍,全面介绍Linux终端命令(二)
  6. 苹果6软件服务器验证失败是怎么回事,iPhone6手机出现验证错误怎么办?
  7. 计算机综合应用上机考试题库,2016年计算机上机考试题库
  8. 字符串转换成整数 php,php如何将字符串转为整数
  9. 一小时后关机_固始一女孩被塑料框“咬手” ,近1个小时后…
  10. python document_python-docx 常用方法