[本文出自天外归云的博客园]

题目要求:

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求英文文档中每个单词出现的次数并排序的更多相关文章

  1. 利用python处理文档中各字段出现的次数并排序

    import string path = 'waldnn' with open(path,'r') as text: words = [raw_word.strip(string.punctuatio ...

  2. py爬取英文文档学习单词

    最近开始看一些整本整本的英文典籍,虽然能看个大概,但是作为四级都没过的我来说还是有些吃力,总还有一部分很关键的单词影响我对句子的理解,因为看的是纸质的,所以查询也很不方便,于是想来个突击,我想把程序单 ...

  3. python3 怎么统计英文文档常用词?(附解释)

    # coding: utf-8 # In[32]: #import requests #from bs4 import BeautifulSoup #res = requests.get(" ...

  4. 英文文档帮查&翻译计划

    以CSDN为首,知乎其次,cnblog带路的一大批博客上充斥着大量低质量的编程入门教程,代码粗制滥造,毫无缩进,没有高亮,东抄西抄.初学者如果长期参照这种垃圾博客来解决问题,将会适得其反,走入歧途. ...

  5. 教你阅读MSDN英文文档,迅速提升编程能力

    在教大家阅读英文文档之前,首先给大家明确一个概念.C#和.NET的区别? 有一定编程经验的同学应该多多少少知道这方面的概念,但是可能模糊,理解的不一定深刻.我在这里简单给出两者的基本定义: C#:仅仅 ...

  6. 利用谷歌翻译网站和Adobe Acrobat翻译英文文档,且鼠标放置后显示英文原文(无字数限制)(18/12/11更新)

    软件:Adobe Acrobat 网页:https://translate.google.cn/?tr=f&hl=zh-CN 方法:       第一步:用Adobe Acrobat 打开英文 ...

  7. 教你查阅Java API 英文文档(JDK 11)

    JAVA Document:https://docs.oracle.com/en/java/javase/11/ 然后找到“Specifications”并点击 API Documentation 比 ...

  8. [转]Postgres-XL 10r1英文文档

    Postgres-XL 是一个完全满足ACID的.开源的.可方便进行水平扩展的.多租户安全的.基于PostgreSQL的数据库解决方案. Postgres-XL 可非常灵活的应用在各类场景中,比如: ...

  9. openstack【Kilo】汇总:包括20英文文档、各个组件新增功能及Kilo版部署

    OpenStack Kilo版本发布 20英文文档OpenStack Kilo版本文档汇总:各个操作系统安装部署.配置文档.用户指南等文档 Kilo版部署 openstack[Kilo]入门 [准备篇 ...

随机推荐

  1. 【转】Kafka 之 中级

    摘要: Kafka配置介绍,原理介绍及生产者,消费者Java基本使用方法. 1.    配置 Ø  Broker主要配置 参数 默认值 说明(解释) broker.id =0   每一个broker在 ...

  2. openssl req 证书请求及自签名证书

    介绍 openssl req 用于生成证书请求,以让第三方权威机构CA来签发,生成我们需要的证书.req 命令也可以调用x509命令,以进行格式转换及显示证书文件中的text,modulus等信息.如 ...

  3. 关于去哪儿网的UI自动化测试脚本

    UI自动化测试Qunar机票搜索场景访问Qunar机票首页http://flight.qunar.com,选择“单程”,输入出发.到达城市,选择today+7日后的日期,点“搜索”,跳转到机票单程搜索 ...

  4. go interface 的坑

    一.概述 [root@node175 demo]# tree . ├── lib │   └── world.go ├── README └── server.go directory, files ...

  5. k8s之服务发现

    一.概述 k8s中支持两种服务发现方法: 环境变量和DNS 二.环境变量 当Pod被创建的时候,k8s将为Pod设置每一个Service的相关环境变量,这些环境变量包括两种类型: k8s Servic ...

  6. Git 撤消操作(分布式版本控制系统)

    1.覆盖提交 有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了.此时,可以运行带有 --amend 选项的提交命令尝试重新提交. $ git commit --amend 或 # g ...

  7. 【Linux】分割命令split

    如果你有文件太大,导致一些携带式装置无法复制的问题,嘿嘿!找 split 就对了! 他可以帮你将一个大文件,依据文件大小或行数来分割,就可以将大文件分割成为小文件了! 快速又有效啊!真心不错- [ro ...

  8. Android 热修复 Tinker接入及源码浅析

    一.概述 放了一个大长假,happy,先祝大家2017年笑口常开. 假期中一行代码没写,但是想着马上要上班了,赶紧写篇博客回顾下技能,于是便有了本文. 热修复这项技术,基本上已经成为项目比较重要的模块 ...

  9. OpenGL tutorial资源在mac yosemite下的cmake生成工程问题

    如果你在使用cmake -G Xcode -Wno-dev OpenGL_Tutorial 时,出现了pThread.h not found的错误, 碰巧你和我一样使用的还是 2.8 版本的cmake ...

  10. python 实验环境

    python 实验环境的搭建 刚开始在windows环境下尝试过komodo ,eclispse pydev,swing,spyder甚至limodou的编辑器,之后ipython,安装很多科学计算包 ...