from cppy.cp_util import *


def extract_words(obj, path_to_file):
    """
    从文件中提取单词并存储在对象的 'data' 字段中。

    Args:
        obj (dict): 存储数据的字典对象。
        path_to_file (str): 文件路径。
    """
    obj['data'] = extract_file_words(path_to_file)


def increment_count(obj, w):
    """
    增加单词的计数。如果单词不存在，则将其计数设置为1。

    参数:
        obj (dict): 存储单词频率的字典对象。
        w (str): 单词。
    """
    obj['freqs'][w] = 1 if w not in obj['freqs'] else obj['freqs'][w] + 1


# 数据存储对象，包含初始化和获取单词的方法
data_storage_obj = {
    'data': [],  # 存储单词列表
    'init': lambda path_to_file: extract_words(data_storage_obj, path_to_file
                                               ),  # 初始化方法，提取文件中的单词
    'words': lambda: data_storage_obj['data']  # 获取单词列表的方法
}

# 单词频率对象，包含增加计数和排序的方法
word_freqs_obj = {
    'freqs': {},  # 存储单词频率的字典
    'increment_count':
    lambda w: increment_count(word_freqs_obj, w),  # 增加单词计数的方法
    'sorted': lambda: sort_dict(word_freqs_obj['freqs'])  # 获取排序后的单词频率的方法
}

if __name__ == '__main__':
    # 初始化数据存储对象，提取文件中的单词
    data_storage_obj['init'](testfilepath)

    # 遍历单词列表，增加单词的计数
    for word in data_storage_obj['words']():
        word_freqs_obj['increment_count'](word)

    # 获取排序后的单词频率并打印
    word_freqs = word_freqs_obj['sorted']()
    print_word_freqs(word_freqs)
