用Python统计瓦尔登湖的词频

利用Python对瓦尔登湖进行词频统计 一、目的 深入理解列表的使用,利用python对瓦尔登湖文本(英文)进行词频统计。 二、必要知识 1.python数据结构 2.数据结构的推导式(List Comprehension) 如我们需要将5个元素装进列表中,写法: b = [i for i in range(1,6)] #显示列表 print(b) 运行结果: 3.split分词 实例: senten... 阅读详情

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

首先需要《瓦尔登湖》的文本:点击下载《瓦尔登湖》(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 string

with 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

python3-瓦尔登湖原文词频统计 Walden Contents WALDEN 1. Economy 2. Where I Lived, and What I Lived For 3. Reading 4. Sounds 5. Solitude 6. Visitors 7. The Bean-Field 8. The Village 9. The Ponds 10. Baker Farm 11. Higher Laws 12. Brute Neighbors 13. House-Warming 14. Inhabitants and W 阅读详情

相关推荐

瓦尔登湖词频统计

瓦尔登湖词频统计 已经有一个瓦尔登湖的文本,“Walden.txt” 统计这篇文章的词频(每个词出现的次数) 不统计标点符号 The和the被统计成同一个词(不区分大小写)输出格式: { ‘the’: 10, ‘is’: 45… def word(): global lst global word_list lst = [] word_list = [] with open("Walden.txt", "r+", encoding="utf-8") as fp:

Vivant 482

python统计词频瓦尔登湖_小说词频数据分析—《瓦尔登湖》

11万余字数的《瓦尔登湖》#!/usr/bin/env python# -*- coding:utf-8 -*-# -*- coding: utf-8 -*-# @Author : ZhuJD# @FILE : TestData_3.py# @Time : 2019/12/29 10:43# @Software: PyCharm# 文件操作f = open('Walden.tx...

weixin_39906906的博客 582

Python基础学习_数据结构___综合项目

手动设定打开文件时所使用的编码格式,不同平台的 ecoding 参数值也不同,以 Windows 为例,其默认为 cp936(GBK 编码),但当要打开的文件不是 GBK 编码格式时,可以在使用 open() 函数时,手动指定打开文件的编码格式.# 手动设定打开文件时所使用的编码格式,不同平台的 ecoding 参数值也不同,以 Windows 为例,其默认为 cp936(GBK 编码),但当要打开的文件不是 GBK 编码格式时,可以在使用 open() 函数时,手动指定打开文件的编码格式.

m0_70495771的博客 146

《Walden》单词词频统计

import collections #创建一个新的容器 f = open('E:\学习文件夹\Walden.txt', 'r').read() #打开本地文本文件,r表示以读取方式打开 f = f.replace(',','').replace('.','').replace('"','').replace(':','') #将所有标点替换成空格 f = f.split() #取出所有单词 f = collections.Counter(f) #在容器中统计每个单词的出现词频 print(f) Count

yinyin_cx的博客 8万+

Neo4j Desktop新手必看:3分钟搞定CSV数据导入(附常见报错解决方案)

本文详细介绍了在Neo4j Desktop中高效导入CSV数据的三种主流方法,包括图形化界面操作、命令行批量导入和Python驱动编程导入,并提供了常见报错解决方案和性能优化技巧,帮助新手快速构建知识图谱。

lambda的博客 648

Windows下TensorRT+YOLOv11部署避坑指南:从CUDA配置到模型加密全流程

本文详细解析了在Windows平台部署YOLOv11与TensorRT的全流程,重点涵盖从CUDA环境配置、工程编译适配到模型加密保护的实战指南。基于wang-xinyu的tensorrtx仓库,提供了详细的版本选择、编译问题修复方案,并深入探讨了如何对TensorRT引擎进行加密,以实现高效且安全的端到端部署。

vscode5coder的博客 450

统计Walden中单词出现的次数

import collections f=open(r'C:\Users\86156\Desktop\Walden.txt','r') str1=f.read().split(' ') m=collections.Counter(str1) print(m)

cheshuyan的博客 451

深入解析Linux Suspend/Resume机制——从用户态到内核态的完整流程

本文深入解析Linux Suspend/Resume机制,从用户态触发到内核态执行的完整流程。详细介绍了三种挂起模式(Freeze、Standby、Suspend to RAM)的实现原理,包括系统调用入口、状态验证、设备挂起流程及平台相关操作。同时提供实战调试技巧,帮助开发者解决电源管理中的常见问题。

weixin_29313239的博客 443

用python统计文章中单词出现的频次

用python统计《Walden》中单词出现的频次,并按频次由高到低排序。 首先在Notebook中导入文章,其次,在编辑代码时打开所导入的文件。 此时文章被读到最后一格,使用close命令关闭, 并开始实行下一个命令:使用 lower() 方法转换字符串中所有大写字符为小写;并读走文章中 ; , . ? ; ” \ ’ ! - 等符号。 将文章中所有字段读开,变成单独的字符串。 对字符串进行读取并排序。 ...

huang_yuqing_的博客 3725

ReportStudio入门教程(四十一) - 固定报表列宽

我们继续上一篇博客,让他看起来

什么是江湖? 3516

28、基准剂量法:原理、应用与计算详解

本文详细介绍了基准剂量法(BMD)的原理、在监管机构中的应用以及具体的计算方法。内容涵盖样本量与BMD的关系、主要监管机构如EPA对BMD的应用、BMD的模型选择与数据拟合过程、拟合优度评估、下置信限(BMDL)计算,以及实验设计对BMD结果的影响。同时,还讨论了剂量指标和响应选择的关键问题,为理解和应用基准剂量法提供了全面的参考。

info6的博客 280

Python入门——词频统计(瓦尔登湖)

编写代码的过程不是一蹴而就得,在之前的写代码过程中我总是想一遍就把代码的全部功能写出来,但是在看了很多入门书籍之后,我发现很多大型的编程文件都是先搭建一个框架,先实现基本功能,然后根据基本功能进行拓展和细化,以及根据代码出现的问题进行调试,然后逐步完善的,其实这个过程就是学习的过程,总有人想着一劳永逸,但是我相信一步步完善代码的过程才是编程的精髓吧。

loveforeversql的博客 1890

零基础基于U-Net网络实战眼底图像血管提取

文章目录1 前言2 血管提取任务概述3 U-Net架构简介4 眼底图像血管分割代码5 结果评估可视化(ROC曲线)6 改进U-Net网络完成眼底图像血管提取任务思路 1 前言 本文基于U-Net架构完成了视网膜血管的提取任务,基于Keras框架更简单的实现分割,网络、工具类、训练和预测的代码一目了然

NJU phd 在读。 5202

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

1.5.1 文件的具体操作打开文件f = open('test.txt', 'w')在python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件:open(文件名,访问模式)写数据(write)f = open('test.txt', 'w')f.write('hello world,\n')f.write('i am here!\n')f.close()结果hello wor...

weixin_39604092的博客 1144

【零基础入门unity游戏开发——unity通用篇14】unity特性相关的知识(基于unity6开发介绍)

unity特性相关的知识(基于unity6开发介绍)

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1204

【N32L40X】学习笔记08-定时器的基本定时功能-超时功能

【代码】【N32L40X】学习笔记08-定时器的基本定时功能-超时功能。

Car12 827

python统计词频瓦尔登湖_python文本挖掘输出权重,词频等信息,画出3d权重图

#-*- coding: utf-8 -*-from pandas importread_csvimportnumpy as npfrom sklearn.datasets.base importBunchimport pickle #导入cPickle包并且取一个别名pickle #持久化类from sklearn.feature_extraction.text importTfidfVect...

weixin_34677764的博客 307

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

python统计词频瓦尔登湖_点评《瓦尔登湖》

170多年前,一位美国青年在瓦尔登湖畔用一把斧头建造了一间林间小屋,在此他过上了两年多与世隔绝、自食其力的隐居生活。这个青年人就是梭罗,后来他把这段隐居生活的经历和感受写成了一本书,就是《瓦尔登湖》这本书。~~~此书的前半部分讲的是他对人生的思考和看法,颇有哲学意味,读起来会比较吃力,至少对我来说是这样的;后半部分主要是对大自然的描述,很美,这部分可以充当现代散文的范本。读完开始的几章后,就感觉有...

weixin_39934257的博客 178

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

用Python统计列表中每个单词出现的次数(瓦尔登湖)

目的 1, 深入理解列表的使用,利用python对瓦尔登湖文本(英文)进行词频统计 2,.数据结构的推导式(List Comprehension) 如我们需要将5个元素装进列表中,写法: 1,b = [i for i in range(1,6)] 2, #显示列表 3.print(b) 运行结果: 3.split分词 实例:1.sentence = "Something that stays in your mind will someday spring up in your life" 2.words

Laityw的博客 5783

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

小说瓦尔登湖单词词频统计

1.首先先去网上下载瓦尔登湖的txt文件(注意保存的路径,我女友姓裘便创建了个文件夹Qiu便于记忆 嘿嘿!) 2.打开jupyter notebook创建py文件 编写第一个代码:输入文章打开路径(我最后改了文件名请注意) 3.去掉文字首位的标点符号,并把首字母大写转成小写。代码如下 4.将列表用set函数转换成集合 5.创建一单词为‘key’,频率为值的字典 6.打印整理后的参数,其中利用lambda表达式,以字典中的值为排序的参数 8.这是运行结果 9.其实代码还是有小误差,但是可以通过p

WQcjyc的博客 2508

词频统计

今天看到了一个关于文本词频统计的python代码。import string path = '/home/ywq/Desktop/Walden.txt' with open(path,'r') as text: words = [raw_word.strip(string.punctuation).lower() for raw_word in text.read().split()]...

yawdd的博客 1383

python统计词频瓦尔登湖_自然语言处理之中文分词器-jieba分词器详解及python实战...

(转https://blog.youkuaiyun.com/gzmfxy/article/details/78994396)中文分词是中文文本处理的一个基础步骤,也是中文人机自然语言交互的基础模块,在进行中文自然语言处理时,通常需要先进行分词。本文详细介绍现在非常流行的且开源的分词器结巴jieba分词器,并使用python实战介绍。jieba分词算法使用了基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能...

weixin_42462474的博客 388

1.5 python文件操作

1.5 python文件操作1.5.1 文件的具体操作打开文件写数据(write)读数据(read)part 1part 2总结打开文件文件操作方法1.5.2 操作实例 1.5.1 文件的具体操作 打开文件 f = open('test.txt', 'w') 在python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件: open(文件名,访问模式) 写数据(write) f = open('test.txt', 'w') f.write('hello world,\n') f.wr

lue_lue_lue_的博客 905

统计字数

f = open('Walden.txt','r') lines = f.readlines() b = open('Walden.txt','r').read() type(b) str b=b.replace(",","") b=b.replace(".","") b=b.replace("?","") b=b.replace("!","") b=b.replace("'","") b=b.replace("’","") b=b.replace("”“","") b = b.split()

Serious510的博客 161

python - 文件操作

目录 文件的基本概念 什么是文件 两种重要的文件类型 文件的缓冲机制: 文件缓冲区: 文件的基本操作: open函数的参数 文件读取 w覆盖写操作 a追加写入 x 新建写入, mode的几种合法组合方式 fp.seek(coolie,whence=0) with 语句管理 练习: 1.统计ip地址出现频率(京东二面题) 2.瓦尔登湖词频统计 文件的基本概念 什么是文件 文件是存放在外部介质(如硬盘,u盘)上面的一组完整信息的集合,这些信息可以为各种文字,图..

qq_48391148的博客 1184

walden词频统计0

#打开并读取文件、 file=open(r'C:\Users\Administrator\Desktop\Walden.txt','r') lines=file.readlines() #要把每行拆成单词 words = [] for line in lines: # 1 print(line.split(" ")) tmp_list=line.split(" ") for word in tmp_list: words.append(word) words #

sn01555的博客 245
上一篇: 用Python判断手机号码的运营商
下一篇: 用Python和类的方法模拟新浪微博的批量虚假粉丝
刘凯KAI
博客等级 码龄15年 663粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值