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方法存在的問題:按行迭代讀取,如果大文件只有一行就不好了。

所以要看實際情況合理選擇兩種方法的使用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM