字典数据类型词频统计

统计一篇文章中非单字词出现的频率,将统计结果存到字典中,在字典中针对此频进行排序,输出出现次数最多的十个字和每个字和每个词出现的次数,通过调用wordcloud库利用统计的词频结果绘制词云
import jieba # jieba 是中文分词库
import matplotlib.pyplot as plt # 绘图库,绘制词云需要
from wordcloud import WordCloud # 专门绘制词云的库
def word_frequency(file):
"""接收文件名为参数,读取文件中的文字,切分为词,统计词频,
返回值为包含词频的字典"""
with open(file, "r", encoding='utf-8') as jack: txt = jack.read() # 读取文件内容为一个字符串
all_words = jieba.lcut(txt) # 利用jieba库将字符串切分成多个词
counts = {} # 创建一个空字典
填空: # 遍历切分好的词
if len(word) == 1: # 如果当前词只有一个字,跳过不统计
填空
else: # 给以当前词为键的元素的值加1,新词初值为0
counts[word] = 填空
return counts # counts为字典,元素是(词:词频)
def top_10_frequency(counts):
" " "接收词频字典为参数,按词频降序排序 输出出现次数最多的10个词及其出现次数,无返回值" " "

counts.items()以可迭代对象的形式返回当前字典中所有元素

根据词频进行排序,降序排序,返回排序后的列表

items = sorted(counts.items(), key=lambda x: x[1], reverse=True)

[('我们', 39), ('今天', 24), ('这个', 18), ('中国', 16), ...]

for item in items[:10]: # items是包含词与数量的元组
word = 填空
count = 填空
print("{0:<10}{1:>5}".format(word, count)) # 左对齐输出当前词,宽度为10;右对齐输出数量,宽度5
def draw_word_cloud(counts):
"""接收词频字典为参数,调用WordCloud库,
利用generate_from_frequencies()方法绘制词云""" # 字典counts中存储的是每个词及其出现的次数,

将其做为参数传给wc.generate_from_frequencies(counts)绘制词云

WordCloud()函数用于设定词云的属性

wc = WordCloud(font_path='msyh.ttc', # 中文字体
background_color='White', # 设置背景颜色 max_words=50, # 设置最大词数 max_font_size=100, # 设置字体最大值 random_state=50, # 随机生成状态数量 scale=1)
wc.generate_from_frequencies(counts) # 传入词频词典生成词云
plt.imshow(wc) # 对图像进行处理
plt.axis("off") # 不显示坐标轴
plt.show() # 显示图像

filename = './jack.txt'
frequency = word_frequency(filename) # 读文件生成词频字典
top_10_frequency(frequency) # 输出排名前10的词及出现次数
draw_word_cloud(frequency) # 绘制词云