Python实现文本单词统计

>>最全面的Java面试大纲及答案解析(建议收藏)  

在以前的文章中,我提到过Python标准库中的collections模块中的Counter类。它的作用非常大,这里我们要用利它来实现单词统计。对于任意一篇全英文的文本文件,我们要列出其中每一个单词各自出现的次数。
我们可以用正则表达式来提取文件中的英文单词(正则表达式是一个极其强大的工具),接着将他们装入列表中,最后用Counter类来统计单词出现频次。

from collections import Counter
import re

"""
    计算一篇英文文章中的单词个数
"""


#为了方便设置默认文件名
def word_count(filename='test.txt'):
    with open(filename, 'r'as f:
        data = f.read()
    #将大小写统一
    data = data.lower()
    #去除特殊字符和数字
    datalist = re.split(r'[sn]+', data)
    return Counter(datalist).most_common()

if __name__ == '__main__':
    wc = word_count()
    for i in range(len(wc)):
        print ('%15s  ---->  %3s' %(wc[i][0], wc[i][1]))
  • 为了避免可能出现的大小写不同的问题使得含大写的单词和小写单词被区别对待,我们使用lower来将所有单词统一为小写

  • re.split():

re.split
可以使用re.split来分割字符串,如:re.split(r’s+’, text);将字符串按空格分割成一个单词列表。
原型:
re.split(pattern, string, maxsplit=0)
通过正则表达式将字符串分离。如果用括号将正则表达式括起来,那么匹配的字符串也会被列入到list中返回。maxsplit是分离的次数,maxsplit=1分离一次,默认为0,不限制次数。

这样我们创建了一个只有单词的列表

  • 最后我们用Counter()来统计,他是一个容器类型,将数据以字典键值对形式存储,其中key为列表中的元素,而value为该元素出现的字数。

  • most_common():返回一个TopN列表。如果n没有被指定,则返回所有元素。当多个元素计数值相同时,排列是无确定顺序的。这样我们就返回了一个list类型数据。方便我们最后格式化输出。

  • 最后几行代码就比较简单了,不过是做一个输出处理。

贴一下部分输出:
这是我随便找的一篇英文小说的一部分,看来the确实是一个高频词汇啊。

            the  ---->   20
            and  ---->   15
             to  ---->   15
             of  ---->   14
              a  ---->   11
             it  ---->   10
            was  ---->   10
             he  ---->    8
             in  ---->    7
            all  ---->    7
           that  ---->    6
            his  ---->    6
     hadleyburg  ---->    5
          their  ---->    5
            for  ---->    5
             so  ---->    4
           were  ---->    4
             at  ---->    4


扫描下方二维码关注公众号:

Python实现文本单词统计


原文始发于微信公众号(公子政的宅日常):Python实现文本单词统计