NLP数据预处理——词频统计(创建词典)程序

自然语言处理中经常涉及到创建词典或者词频统计,这里分享一个小程序,希望能给大家提供一点帮助,也欢迎各位指点我的程序,哪怕再小的程序也值得不断完善。

词频统计问题可以描述如下:

用Python实现函数count_words(),该函数输入字符串s和数字n,返回s中n个出现频率最高的单词。返回值是一个元组列表,包含出现次数最高的n个单词及其次数,即[(<单词1>, <次数1>), (<单词2>, <次数2>), ... ],按出现次数降序排列。

假设所有输入都是小写形式,并且不含标点符号或其他字符(只包含字母和单个空格)。如果出现次数相同,则按字母顺序排列。那么可以有以下程序:

"""统计词频"""


def count_words(s, n):
    """返回字符串s中出现频率最高的n个词."""

    s_list = s.lower().split(' ')  # 单词统一转换为小写形式,并以空格进行切分

    # 统计字符串s中每个单词出现的次数
    top_n_dict = {}
    for word in s_list:
        if word in top_n_dict:
            top_n_dict[word] += 1
        else:
            top_n_dict[word] = 1

    # 按照出现频次对单词进行排序,如果出现频次相同,则按字母顺序排序
    word_frequency = []
    values = sorted(list(set(top_n_dict.values())), reverse=True)  # 统计所有单词出现的频次情况,将频次降序放入列表
    for w in values:
        # 将出现频次相同的单词放在一个列表里
        word_list = []
        for k, v in top_n_dict.items():
            if v == w:
                word_list.append((k, v))
        # 将出现频次相同的单词排序后添加到词频列表
        word_frequency.extend(sorted(word_list))

    # 返回出现频次排前n的单词
    return word_frequency[:n]


if __name__ == '__main__':
    print(count_words("Cat bat mat cat bat Cat", 3))
    print(count_words("betty bought a bit of Butter but the Butter was bitter", 3))


你可能感兴趣的:(python,自然语言处理NLP)