自然语言处理中经常涉及到创建词典或者词频统计,这里分享一个小程序,希望能给大家提供一点帮助,也欢迎各位指点我的程序,哪怕再小的程序也值得不断完善。
词频统计问题可以描述如下:
用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))
版权声明:本文为hfutdog原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。