- 分析词频并排序
主要内容 #
完成效果 #
本节课程是字数统计小程序的第二节,完成本节课程,能实现点击分析按钮,自动统计文本中每个字符出现的频次,并进行排序。

收获 #
学习完本节内容,我们会掌握对获取的文本内容进行词频统计的方法,并进行排序。
1.分析词频并排序 #
本例中,承接上一节课,当点击分析按钮时,对打开的example2.txt文件内容进行词频统计,然后降序排列,并打印分析结果。
本节中利用sort函数对countList列表进行排序,reverse=True指定降序排列。由于countList的每一个元素是一个元组,sort默认依据每个元组的第一个元素来进行比较并排序。以下就是分析词频并排序的代码:
from PyQt5.QtWidgets import QWidget, QTextEdit, QVBoxLayout, QFileDialog, QHeaderView, QApplication, QPushButton, QTableView
from PyQt5.QtGui import QStandardItemModel, QStandardItem
import sys, csv
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
button = QPushButton('分析') # 添加一个按钮
# 点击按钮,触发clicked信号,连接到槽函数getAnalyse
button.clicked.connect(self.getAnalyse)
textEdit = QTextEdit() # 创建一个多行文本编辑框
self.layout = QVBoxLayout() # 创建一个垂直盒布局
self.layout.addWidget(button) # 将按钮添加到布局中
self.layout.addWidget(textEdit) # 将文本编辑框添加到文本中
self.setLayout(self.layout) # 将布局应用到程序窗口
filename, filetype = QFileDialog.getOpenFileName(self, '打开文件', 'D:\\Python_Tips\\Dashima\\pics', 'Text Files (*.txt)') # 弹出打开文件对话框
if filename: # 如果文件名不为空,即选择了一个文件
# 则打开并读取名为filename的文件内容,encoding='utf-8 可以兼容中文
with open(filename, 'r', encoding='utf-8') as data: # 则打开并读取名为filename的文件内容,encoding='utf-8 可以兼容中文
self.content = data.read() # read方法可以读取txt文档的所有内容
textEdit.setText(self.content) # 把文档内容显示在文本框中
self.setGeometry(300, 300, 500, 800)
self.setWindowTitle('字数统计小程序')
self.show()
def getAnalyse(self): # 槽函数 用来分析统计文本字数
content2 = set(self.content) # set函数去除文本内容中的重复文字
content2 = list(content2) # 再转化为列表
self.countList=[] # 用来储存统计结果
for i in content2: # 遍历content2的每一个字符
# ' ' 是空格, '\n' 是换行符, '\u3000'是全角的空格符,三者都不属于我们能看见的字符,无需统计
if i == ' ' or i == '\n' or i =='\u3000':
continue # 直接跳到下一次循环
m = self.content.count(i) # count()方法计算字符i在self.content中出现的次数
self.countList.append((m, i)) # 将出现的次数和对应文字组成元组,并添加到统计列表countList中
self.countList.sort(reverse=True) # 将统计列表按照出现的次数降序排列
for m, n in self.countList: # 循环遍历列表,打印统计结果
print('字符\"{}\"出现了{}次'.format(n, m)) # \" 用于字符串中嵌套引号
app = QApplication(sys.argv) # 创建应用程序
ex = Example() # 创建窗口对象
sys.exit(app.exec_()) # 设置关闭窗口后结束进程
拓展练习:尝试将sort函数的参数改为reverse=False,实现词频升序排列。
小结 #
习题 #
- 习题1:尝试自定义一个txt文件,进行词频统计并排序。