博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python3求英文文档中每个单词出现的次数并排序
阅读量:5923 次
发布时间:2019-06-19

本文共 1190 字,大约阅读时间需要 3 分钟。

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

题目要求:

1、统计英文文档中每个单词出现的次数。

2、统计结果先按次数降序排序,再按单词首字母降序排序。

3、需要考虑大文件的读取。

我的解法如下:

import chardetimport 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 freqif __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方法存在的问题:按行迭代读取,如果大文件只有一行就不好了。

所以要看实际情况合理选择两种方法的使用。

转载地址:http://yfavx.baihongyu.com/

你可能感兴趣的文章
c#金额转换成中文大写金额 .Net开发Windows服务
查看>>
180426
查看>>
Windows 下的高 DPI 应用开发(UWP / WPF / Windows Forms / Win32)
查看>>
mysql远程连接 Host is not allowed to connect to this MySQL server
查看>>
携程apollo系列-个人开发环境搭建
查看>>
一起谈.NET技术,ASP.NET MVC 2生成动态表单的一种最简单的思路
查看>>
51 个漂亮的电子商务网站设计分享
查看>>
[代码健壮性] 学会同时关注代码的正面和反面情况,提高系统健壮性
查看>>
SQL Server标量值函数-汉字转拼音
查看>>
zz 使用svn——项目的目录布局
查看>>
UNION和UNION ALL的用法区别
查看>>
如何充分利用时间碎片学习新东西--敏捷阅读
查看>>
linux下WordPress文件夹权限设置
查看>>
GC in C# and Python
查看>>
各种国家标准代码表
查看>>
解决Eclipse进行Android开发时logcat不显示问题-使用DDMS
查看>>
[Step By Step]SAP HANA中创建分析权限(Analytic Privilege)
查看>>
黑马程序员:Java基础总结----java注解
查看>>
ASP.NET4.5Web API及非同步程序开发系列(2)
查看>>
ny42 一笔画问题
查看>>