分享一个基于jieba的Python 代码jieba,它可以对文本进行分词和词频统计,并提供了图形界面。

代码效果是,选择文本文档分词并统计词频,显示并保存。

单词长度、显示数量、保存数量可以在界面选择。

jieba库_jieba库_jieba库

▼代码注释

import tkinter as tkfrom tkinter import filedialogimport jieba          
# 创建一个WordFrequenceAnalyzer类class WordFrequenceAnalyzer: def __init__(self): # 创建一个窗口实例 self.window = tk.Tk() self.window.title("Jieba词频分析") # 设置窗口标题 self.window.geometry("800x600") # 设置窗口大小
# 创建顶部的Frame组件,放置单词长度、显示数量和保存数量的相关组件 self.top_frame = tk.Frame(self.window) self.word_length_label = tk.Label(self.top_frame, text="单词长度:") # 单词长度的标签 self.word_length_entry = tk.Entry(self.top_frame, width=10) # 单词长度的输入框 self.word_length_entry.insert(0, "2") # 默认设置为2 self.word_length_label.pack(side=tk.LEFT) # 放置在左侧 self.word_length_entry.pack(side=tk.LEFT) # 放置在左侧
self.topn_label = tk.Label(self.top_frame, text="显示数量:") # 显示数量的标签 self.topn_entry = tk.Entry(self.top_frame, width=10) # 显示数量的输入框 self.topn_entry.insert(0, "10") # 默认设置为10
self.save_label = tk.Label(self.top_frame, text="保存数量:") # 保存数量的标签 self.save_entry = tk.Entry(self.top_frame, width=10) # 保存数量的输入框 self.save_entry.insert(0, "100") # 默认设置为100
self.topn_label.pack(side=tk.LEFT, padx=5) # 放置在左侧,x轴的内间距5像素 self.topn_entry.pack(side=tk.LEFT) # 放置在左侧 self.save_label.pack(side=tk.LEFT, padx=5) # 放置在左侧,x轴的内间距5像素 self.save_entry.pack(side=tk.LEFT) # 放置在左侧 self.top_frame.pack(side=tk.TOP, padx=10, pady=10) # 放置在窗口顶部,x和y轴外间距为10像素
# 创建底部的Frame组件,放置选择文件的按钮和分析词频的按钮 self.bottom_frame = tk.Frame(self.window) self.filepath_entry = tk.Entry(self.bottom_frame, width=50) # 文件路径显示框 self.browse_btn = tk.Button(self.bottom_frame, text="选择文件", command=self.load_file) # 选择文件的按钮 self.filepath_entry.pack(side=tk.LEFT, padx=10, pady=10) # 放置在左侧,x和y轴的内间距为10像素 self.browse_btn.pack(side=tk.LEFT, padx=10, pady=10) # 放置在左侧,x和y轴的内间距为10像素
self.analyze_btn = tk.Button(self.bottom_frame, text="分析词频", command=self.analyze) # 分析词频的按钮 self.analyze_btn.pack(side=tk.RIGHT, padx=10, pady=10) # 放置在右侧,x和y轴的内间距为10像素 self.bottom_frame.pack(side=tk.BOTTOM, padx=10, pady=10) # 放置在窗口底部,x和y轴外间距为10像素
# 创建右侧的Frame组件,放置词频分析结果的文本框 self.right_frame = tk.Frame(self.window) self.result_text = tk.Text(self.right_frame, height=20) # 词频分析结果文本框 self.result_text.pack(side=tk.TOP, padx=10, pady=10) # 放置在上方,x和y轴的内间距为10像素 self.right_frame.pack(side=tk.RIGHT, padx=10, pady=10) # 放置在窗口右侧,x和y轴外间距为10像素
self.window.mainloop() # 进入事件循环,运行窗口实例
def load_file(self): filepath = tk.filedialog.askopenfilename() # 打开文件选择对话框,获取用户选择的文件路径 self.filepath_entry.delete(0, tk.END) # 删除文件路径显示框中的旧内容 self.filepath_entry.insert(0, filepath) # 将新的文件路径插入到文件路径显示框中
def analyze(self): filepath = self.filepath_entry.get() # 获取文件路径显示框中的文件路径 word_length = int(self.word_length_entry.get()) # 获取单词长度输入框中的单词长度 topn = int(self.topn_entry.get()) # 获取显示数量输入框中的显示数量 save_num = int(self.save_entry.get()) # 获取保存数量输入框中的保存数量
word_count = {} # 创建一个空字典,用于统计单词出现的次数 with open(filepath, "r", encoding="utf-8") as f: # 打开文件并以utf-8编码读取内容 for line in f: # 遍历文件的每一行 words = jieba.cut(line.strip()) # 使用jieba库对每一行进行分词处理 for word in words: # 遍历分词结果 if len(word) == word_length: # 如果单词的长度符合要求 if word in word_count: # 如果单词已经在字典中 word_count[word] += 1 # 将该单词的次数加1 else: # 如果单词不在字典中 word_count[word] = 1 # 将该单词的次数设置为1
sorted_words = sorted(word_count.items(), key=lambda x: x[1], reverse=True) # 对单词按词频进行排序
result_str = f"前{topn}个单词及其词频:n" # 初始化结果字符串 for i, (word, freq) in enumerate(sorted_words[:topn]): # 遍历排序后的单词列表的前topn个单词及其词频 result_str += f"{i+1}. {word}:{freq}n" # 将单词及其词频添加到结果字符串中
self.result_text.delete(1.0, tk.END) # 清空词频分析结果文本框的内容 self.result_text.insert(tk.END, result_str) # 将结果字符串插入到词频分析结果文本框中
with open("jieba_词频.txt", "w", encoding="utf-8") as f: # 打开文件并以utf-8编码写入内容 for i, (word, freq) in enumerate(sorted_words[:save_num]): # 遍历排序后的单词列表的前save_num个单词及其词频 f.write(f"{i+1}. {word}:{freq}n") # 将单词及其词频写入文件中# 主函数def main():word_analyzer = WordFrequenceAnalyzer() # 创建一个WordFrequenceAnalyzer的实例if __name__ == '__main__': main() # 调用主函数运行程序#主函数def main():
word_analyzer = WordFrequenceAnalyzer() # 创建一个WordFrequenceAnalyzer的实例if __name__ == '__main__': main() # 调用主函数运行程序

▼知识点

※tkinter模块:这是一个用于创建图形用户界面(GUI)的标准库,可以用来制作窗口、的按钮、文本框等组件

创建一个窗口(Window)对象,用来显示GUI程序的主界面。代码如下:

self.window = tk.Tk()self.window.title("Jieba实例3分析词频")self.window.geometry("800x600")

创建一个框架(Frame)对象创业项目,用来作为其他组件的容器。代码如下:

self.top_frame = tk.Frame(self.window)self.bottom_frame = tk.Frame(self.window)self.right_frame = tk.Frame(self.window)

创建一些标签(Label)对象,用来显示一些文本信息。代码如下:

self.word_length_label = tk.Label(self.top_frame, text="单词长度:") self.topn_label = tk.Label(self.top_frame, text="显示数量:")self.save_label = tk.Label(self.top_frame, text="保存数量:")

创建一些文本框(Entry)对象,用来获取用户输入的一些参数。代码如下:

self.word_length_entry = tk.Entry(self.top_frame, width=10)self.word_length_entry.insert(0, "2") self.topn_entry = tk.Entry(self.top_frame, width=10)self.topn_entry.insert(0, "10")self.save_entry = tk.Entry(self.top_frame, width=10)self.save_entry.insert(0, "100") 

创建一个按钮(Button)对象,用来让用户选择要分析的文件。代码如下:

self.browse_btn = tk.Button(self.bottom_frame, text="选择文件", command=self.load_file)

创建一个文本(Text)对象,用来显示分析结果。代码如下:

self.result_text = tk.Text(self.right_frame, height=20)

使用pack布局管理器,将组件放在对应的容器中,并指定一些选项,比如side和padx。代码如下:

self.word_length_label.pack(side=tk.LEFT)self.word_length_entry.pack(side=tk.LEFT)...self.top_frame.pack(side=tk.TOP, padx=10, pady=10)...

使用bind方法,将一个事件处理器函数绑定到一个事件上,比如当用户按下回车键时,执行分析词频的函数。代码如下:

self.filepath_entry.bind("", self.analyze)


▼资源下载

获取代码及相关资源jieba库,公众号聊天窗口回复python即可

注册会员查看全部内容……

限时特惠本站每日持续更新海量各大内部创业教程,年会员只要98元,全站资源免费下载
点击查看详情
站长微信:9200327

发表回复

后才能评论