'''
消除全局变量，限定函数只有输入输出来和外界打交道。
如果消除无用的中间变量，那么就是典型的数据处理流水线风格:我要在一个函数中，完成某个操作，然后调用下一个函数进行处理 。
流水线风格阅读方便、提供栈性能优化的可能 。
如果需要加参数，那么需要柯里化方法（即Python里面的闭包函数结构）
'''

import re
from cppy.cp_util import *

def extractwords(str_data):
    pattern = re.compile('[\W_]+')
    word_list = pattern.sub(' ', str_data).lower().split()
    stop_words = get_stopwords()    
    return [w for w in word_list if not w in stop_words]

def frequencies(word_list):    
    word_freqs = {}  
    for word in word_list:  
        word_freqs[word] = word_freqs.get(word, 0) + 1    
    return word_freqs

def sort(word_freq):    
    return sorted( word_freq.items(), key=lambda x: x[1], reverse=True )


if __name__ == "__main__":
    txtcontent = read_file( testfilepath )
    word_list = extractwords( txtcontent )
    word_freqs = frequencies( word_list )     
    word_sorts = sort ( word_freqs )
    for tf in word_sorts[:10]:
        print(tf[0], '-', tf[1])  