python编程:英文小说词频统计

866 阅读2分钟
原文链接: zhuanlan.zhihu.com

一、编程目的:

1、英文小说(The Myths )分词,并进行词频统计

2、绘制词频统计直方图

3、为小说情感分析做准备

二、编程环境:

1、pyhon3+pycharm

2、需安装模块:string、matplotlib.pyplot

三、编程效果:

效果图二

四、编程代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#1导入模块
import string                            #导入字符串模块
import matplotlib.pyplot as plt          #导入matplotlib模块,取别名plt
#from matplotlib import pyplot as plt     #导入matplotlib模块,取别名plt

#2读取文件,并分词
hist = {}                                 #创建一个空字典,放词频与单词,无序排列
data = []                                 #创建一个空列表,放词频与单词,有序:从多到少
f = open('The Myths(神话).txt','r')   #打开文件
content = f.read()                        #读取文件
f.close()                                 #关闭文件
content = content.replace('-',' ')       #连字符—用空格代替
words = content.split()                   #字符串按空格分割--分词

#迭代处理:将字典变列表,存入数据
for i in range(len(words)):
    words[i] = words[i].strip(string.punctuation)  #去掉标点符号,去掉首尾
    words[i] = words[i].lower()                    #统一大小写
    if words[i] in hist:                          #统计词频与单词
        hist[words[i]] = hist[words[i]] + 1        #不是第一次
    else:
        hist[words[i]] = 1                         #第一次
#print(hist)                                       #打印字典(词频与单词,无序)

#遍历字典
for key, value in hist.items():                    #遍历字典
    temp = [value,key]                              #变量,变量值
    data.append(temp)                               #添加数据
data.sort(reverse=True)                            #排序
#print(data)                                        #打印列表(词频与单词,有序,从多到少)

#绘制直方图(词频TOP1-10)
plt.rcParams['font.sans-serif']=['SimHei']      #直方图正常显示中文字体
for i in range(0,10):
    plt.bar((data[i][1],),(data[i][0],))
plt.title('小说"The Myths(神话)"词频(TOP1-10)')  #显示标题
plt.xlabel('单词')                                   # 显示x轴名称
plt.ylabel('词频')                                   # 显示y轴名称
plt.legend('词频直方图')                             #显示图例
plt.show()                                            #显示作图结果

#绘制直方图(词频TOP11-20)
for i in range(10,20):
    plt.bar((data[i][1],),(data[i][0],))
plt.legend('直方图')
plt.xlabel('单词')
plt.ylabel('词频')
plt.title('小说"The Myths(神话)"词频(Top11-20)')
plt.show()