《构建之法》作业:英文文本词频统计
实现功能:
- 统计文本中所有出现字母出现的次数、频率(不区分大小写),按出现频率从高到底排列,同频率按字母顺序排列
- 统计文本中出现的所有单词的次数、频率(不区分大小写),按出现频率从高到底排列,同频率按字母顺序排列
- 支持输入数字n,仅查看出现频率最高的前n个单词
- 支持设置stopwords,剔除统计stopwords中单词
使用:
运行代码,出现窗口File,在输入框内输入所需统计的文本路径(加文件后缀名),点击OK。
随后出现对话框及5个按钮,对应5个功能:
- letters number:
输出所有字母出现次数、频率 - all words number without stopwords:
输出所有单词出现次数、频率,不启用stopwords - all words number with stopwords:
输出所有单词出现次数、频率,启用stopwords - input words number without stopwords:
输出给定前n个单词出现次数、频率,不启用stopwords - input words number with stopwords:
输出给定前n个单词出现次数、频率,启用stopwords
环境:
python3.6
pip install prettytable(用来生成表格)
代码:
'''
目标: 统计文本中英语单词的频率
功能: 1、统计文本中所有出现字母出现的次数、频率(不区分大小写),按出现频率从高到底排列,同频率按字母顺序排列
2、统计文本中出现的所有单词的次数、频率(不区分大小写),按出现频率从高到底排列,同频率按字母顺序排列
3、支持输入数字n,仅查看出现频率最高的前n个单词
4、支持设置stopwords,剔除统计stopwords中单词
'''
import string
import re
import prettytable as pt
from tkinter import *
#************文件输入框**********
window1 = Tk()
window1.title('File')
window1.geometry('200x100')
entry = Entry(window1,width=20)
entry.pack()
def closewindow1():
window1.destroy()
def change_state():
global path
path = entry.get() # 调用get()方法,将Entry中的内容获取出来
button_in = Button(window1, text='OK', command=lambda:[change_state(),closewindow1()]).pack()
window1.mainloop()
#*************读取文件**************
# path = "./The Heart of a Broken Story.txt"
alph = dict(zip('abcdefghijklmnopqrstuvwxyz', [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]))
with open(path,"r", encoding='utf-8') as f:
data = f.read()
data = str(data) # 所需统计的文本,放入列表中
data_lower = data.lower() # 全部用小写读入
data_words = re.findall(r'[\w]+', data_lower) # 遇到以下字符,讲句子切割成单词,存入data_words
# data_words.pop() # 使用re.split读入时,需要删除最后一个空字符
k1 = 0
k2 = 0
while 1: # 删除存储单词的列表中非字母开头的元素
if data_words[k1][0] not in alph