Python练习册5

第 0006 题:你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都是英文,请统计出你认为每篇日记最重要的词。

解题:作为一个练习题,不要想的太复杂,这里不涉及关键词提取等算法,仅仅通过词频统计就可以了(当然这么做是很不正确的,此处我们就认为正确吧),所以目标就是英文分词,统计词频,排序的一个过程。重点是字典排序,按键排序or按值排序?

# -*- coding: utf-8 -*-

import re
import os

# Get all files in designated path
def get_files(path):
    filepath = os.listdir(path)
    files = []
    for fp in filepath:
        fppath = path + '/' + fp
        if(os.path.isfile(fppath)):
            files.append(fppath)
        elif(os.path.isdir(fppath)):
            files += get_files(fppath)  #递归遍历所有文件
    return files

# Get the most popular word in designated files
def get_important_word(files):
    worddict = {}
    for filename in files:
        f = open(filename, 'rb')
        s = f.read()
        words = re.findall(r'[a-zA-Z0-9]+', s)   #正则匹配单词
        for word in words:       #统计词频
            worddict[word] = worddict[word] + 1 if word in worddict else 1
        f.close()
    #字典排序,如果对字典进行排序,常用的形式如下:sorted(dict.items(),
    #key=lambda e:e[1], reverse=True), 其中e表示dict.items()中的一个
    #元素,e[1]则表示按 值排序如果把e[1]改成e[0],那么则是按键排序,
    #reverse=False可以省略,默认为升序排列。
    wordsort = sorted(worddict.items(), key=lambda e:e[1], reverse=True)
    return wordsort

if __name__ == '__main__':
    files = get_files('.')
    print files
    wordsort = get_important_word(files)
    # 避免遗漏有多个最大值的情况
    maxnum = 1
    for i in range(len(wordsort) - 1):

        if wordsort[i][1] == wordsort[i + 1][1]:
            maxnum += 1
        else:
            break
    for i in range(maxnum):
        print wordsort[i]




你可能感兴趣的:(python,词频统计,字典排序)