Python3求英文文档中每个单词出现的次数并排序
[本文出自天外归云的博客园]
题目要求:
1、统计英文文档中每个单词出现的次数。
2、统计结果先按次数降序排序,再按单词首字母降序排序。
3、需要考虑大文件的读取。
我的解法如下:
import chardet
import re # 大文件读取生成器
def read_big_file(f_path, chunk_size=100):
f = open(f_path, 'rb')
while True:
# 每次读取指定内存大小的内容
chunk_data = f.read(chunk_size)
if not chunk_data:
break
# 获取文件编码并返回解码后的字符串
detect = chardet.detect(chunk_data)
# print(f'文件编码:{detect["encoding"]}')
yield chunk_data.decode(detect["encoding"]) # Pythonic大文件读取生成器
def read_big_file_pythonic(f_path):
with open(f_path, "rb") as f:
for line in f.readlines():
yield line.decode() # 设定分词符并用字典统计单词出现次数
def words_freq(data, freq={}):
for word in re.split('[,. ]', data):
if word in freq:
freq[word] += 1
elif word != "":
freq[word] = 1
return freq if __name__ == '__main__':
f_path = "en_text.txt"
freq = {}
for i in read_big_file_pythonic(f_path):
freq = words_freq(i, freq)
print(sorted(freq.items(), key=lambda x: (x[1], x[0]), reverse=True))
其中read_big_file方法存在的问题:按大小进行文件读取可能会在边界处将一个单词拆分为两个单词,目前没找到什么好办法解决。
其中read_big_file_pythonic方法存在的问题:按行迭代读取,如果大文件只有一行就不好了。
所以要看实际情况合理选择两种方法的使用。
Python3求英文文档中每个单词出现的次数并排序的更多相关文章
- 利用python处理文档中各字段出现的次数并排序
import string path = 'waldnn' with open(path,'r') as text: words = [raw_word.strip(string.punctuatio ...
- py爬取英文文档学习单词
最近开始看一些整本整本的英文典籍,虽然能看个大概,但是作为四级都没过的我来说还是有些吃力,总还有一部分很关键的单词影响我对句子的理解,因为看的是纸质的,所以查询也很不方便,于是想来个突击,我想把程序单 ...
- python3 怎么统计英文文档常用词?(附解释)
# coding: utf-8 # In[32]: #import requests #from bs4 import BeautifulSoup #res = requests.get(" ...
- 英文文档帮查&翻译计划
以CSDN为首,知乎其次,cnblog带路的一大批博客上充斥着大量低质量的编程入门教程,代码粗制滥造,毫无缩进,没有高亮,东抄西抄.初学者如果长期参照这种垃圾博客来解决问题,将会适得其反,走入歧途. ...
- 教你阅读MSDN英文文档,迅速提升编程能力
在教大家阅读英文文档之前,首先给大家明确一个概念.C#和.NET的区别? 有一定编程经验的同学应该多多少少知道这方面的概念,但是可能模糊,理解的不一定深刻.我在这里简单给出两者的基本定义: C#:仅仅 ...
- 利用谷歌翻译网站和Adobe Acrobat翻译英文文档,且鼠标放置后显示英文原文(无字数限制)(18/12/11更新)
软件:Adobe Acrobat 网页:https://translate.google.cn/?tr=f&hl=zh-CN 方法: 第一步:用Adobe Acrobat 打开英文 ...
- 教你查阅Java API 英文文档(JDK 11)
JAVA Document:https://docs.oracle.com/en/java/javase/11/ 然后找到“Specifications”并点击 API Documentation 比 ...
- [转]Postgres-XL 10r1英文文档
Postgres-XL 是一个完全满足ACID的.开源的.可方便进行水平扩展的.多租户安全的.基于PostgreSQL的数据库解决方案. Postgres-XL 可非常灵活的应用在各类场景中,比如: ...
- openstack【Kilo】汇总:包括20英文文档、各个组件新增功能及Kilo版部署
OpenStack Kilo版本发布 20英文文档OpenStack Kilo版本文档汇总:各个操作系统安装部署.配置文档.用户指南等文档 Kilo版部署 openstack[Kilo]入门 [准备篇 ...
随机推荐
- 老男孩linux实战培训初级班第二次课前考试题
################################################################ 本文内容摘录于老男孩linux实战运维培训中心课前考试题(答案部分) ...
- 搞不懂为什么开发人员爱iOS恨Android?
导读:很多网站发表文章大同小异.唯有这个不同点,给大家分享. Android和iOS的较量一直都是人们津津乐道的话题.两个平台各有各的优势所在,同时也都力图能在各个方面赶超对手.对于用户来说,青菜萝卜 ...
- 安装Nginx+Tomcat
Centos下安装nginx rpm包 1 在nginx官方网站下载一个rpm包,下载地址是:http://nginx.org/packages/centos/ http://nginx.org/e ...
- C#创建文件夹并设置权限
原文地址:https://www.cnblogs.com/top5/archive/2010/04/12/1710141.html /* 需要添加以下命名空间: using System.IO; ...
- Linux 性能监控 : CPU 、Memory 、 IO 、Network
一.CPU 1.良好状态指标 CPU利用率:User Time <= 70%,System Time <= 35%,User Time + System Time <= 70% 上下 ...
- objgraph无法生成分析图的原因
x = [1, 2, 3]y = [x, dict(key1=x)]z = [y, (x, y)] import objgraphobjgraph.show_refs([y],filename='sa ...
- 源码安装mysql 5.7.19数据库
1.系统要求yum install -y cmake make gcc gcc-c++ bison ncurses ncurses-devel 2.创建用户和组groupadd mysql & ...
- [转]在windows上实现多个java jdk的共存解决办法
问题背景 公司项目中应用到的jdk环境为1.6,最近在家学习IntelliJ IDEA中sdk多环境配置时,想安装Jdk1.8,作为学习基础.那么问题来了,公司项目扩展不支持jdk1.8,为了既能满足 ...
- 用python做网页抓取与解析入门笔记[zz]
(from http://chentingpc.me/article/?id=961) 事情的起因是,我做survey的时候搜到了这两本书:Computational Social Network A ...
- CSS加DIV布局
第一种: <div> <div class="right"> <p></p> <p></p> <p&g ...