使用python3完成英文詞頻統計

import collections
import re


def contains_chinese(ustr):
    """判斷unicode字符串中是否包含中文

    :param ustr:unicode字符串
    """

    return any('\u4e00' <= char <= '\u9fff' for char in ustr)


def strip_symbol(ustr):
    """刪除unicode字符串中英文的標點符號

    :param ustr:unicode字符串
    """

    return re.sub('[’!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~]+',' ',ustr)


def count_word(filename):
    """統計filename文本文件中非中文詞的出現頻率

    :param filename:需要統計詞頻的文本文件
    """

    # 返回值爲dict,會自動進行計數
    word_counter=collections.Counter()

    with open(filename,'r',encoding='utf-8') as f:
        for line in f:
            #過濾中文
            if contains_chinese(line):
                continue

            # 去除英文標點符號
            line=strip_symbol(line)
            # 全部轉爲小寫
            line=line.lower()

            word_counter.update([word for word in re.split('\s+',line) if word !=''])

    return dict(word_counter)


def get_top(filename,topk=10):
    """獲取出現頻率最高的topk個詞

    :param filename:需要統計詞頻的文本文件
    :param topk:需要返回的出現頻率最高的前topk個詞,默認爲10個
    """

    # 統計filename文本中的詞頻信息,保存到dict中
    word_dict=count_word(filename)
    # 對word_dict根據出現的詞頻進行降序排序
    topk_words=sorted(word_dict.items(),key=lambda x:x[1],reverse=True)
    return topk_words[:topk]


if '__main__'==__name__:
    import sys
    if len(sys.argv)!=3:
        print('Usage: {} filename topk'.format(sys.argv[0]),file=sys.stderr)
        sys.exit(0)
    top_words=get_top(sys.argv[1],int(sys.argv[2]))
    for k,v in top_words:
        print(k,v)

運行示例:

python 詞頻統計.py 英文文本.txt 50
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章