百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

Jieba实例4提取关键词+图形化界面

toyiye 2024-06-21 12:05 9 浏览 0 评论

分享一个基于jieba库的Python 代码,它可以从文本中提取关键词,并提供图形界面。

代码效果是,选择文本文档进行关键词提取,将关键词显示在屏幕,并保存在指定文件内(guanjianci.txt)。

可以选择算法、单词长度、词性和关键词数量的。

代码注释

import tkinter as tk # 导入tkinter模块,用于创建GUI界面
import tkinter.filedialog # 导入tkinter.filedialog模块,用于文件选择对话框
import jieba.analyse # 导入jieba.analyse模块,用于关键词提取
import jieba.posseg as pseg # 导入jieba.posseg模块,用于词性标注
class KeywordExtractor:
def __init__(self, window):
self.window = window # 保存窗口对象
# 创建左侧Frame
self.left_frame = tk.Frame(window, width=500, height=500)
self.left_frame.pack(side=tk.LEFT)
# 创建算法选择Frame
self.algorithm_frame = tk.Frame(self.left_frame)
self.algorithm_frame.pack(side=tk.TOP, padx=10, pady=10, fill=tk.X)
self.algorithm_label = tk.Label(self.algorithm_frame, text="选择算法:", width=10)
self.algorithm_label.pack(side=tk.LEFT)
self.algorithm_var = tk.StringVar()
self.algorithm_var.set("tfidf")
self.algorithm_choices = [("tfidf", "TF-IDF算法"), ("textrank", "TextRank算法")]
for algo, algo_name in self.algorithm_choices:
rb = tk.Radiobutton(self.algorithm_frame, text=algo_name, variable=self.algorithm_var, value=algo)
rb.pack(side=tk.LEFT, padx=5)
# 创建单词长度设置Frame
self.word_length_frame = tk.Frame(self.left_frame)
self.word_length_frame.pack(side=tk.TOP, padx=10, pady=10, fill=tk.X)
self.word_length_label = tk.Label(self.word_length_frame, text="单词长度:", width=10)
self.word_length_label.pack(side=tk.LEFT)
self.word_length_entry = tk.Entry(self.word_length_frame, width=10)
self.word_length_entry.insert(0, "2")
self.word_length_entry.pack(side=tk.LEFT)
# 创建词性过滤选择Frame
self.pos_frame = tk.Frame(self.left_frame)
self.pos_frame.pack(side=tk.TOP, padx=10, pady=10, fill=tk.X)
self.pos_label = tk.Label(self.pos_frame, text="词性:", width=10)
self.pos_label.pack(side=tk.LEFT)
self.pos_choices = [("n", "名词"), ("nr", "人名"), ("ns", "地名"), ("eng", "其他专名"), ("a", "形容词"), ("v", "动词")]
self.pos_vars = {pos: tk.BooleanVar() for pos, _ in self.pos_choices}
for pos, pos_name in self.pos_choices:
cb = tk.Checkbutton(self.pos_frame, text=pos_name, variable=self.pos_vars[pos])
cb.pack(side=tk.LEFT, padx=5)
# 创建底部Frame
self.bottom_frame = tk.Frame(self.left_frame)
self.bottom_frame.pack(side=tk.TOP, padx=10, pady=10, fill=tk.X)
# 创建关键词数量的设置
self.topn_label = tk.Label(self.bottom_frame, text="关键词数量:", width=10)
self.topn_label.pack(side=tk.LEFT)
self.topn_entry = tk.Entry(self.bottom_frame, width=10)
self.topn_entry.insert(0, "10")
self.topn_entry.pack(side=tk.LEFT)
# 创建右侧Frame
self.right_frame = tk.Frame(window, width=450, height=500)
self.right_frame.pack(side=tk.RIGHT)
# 创建显示结果的文本框
self.result_text = tk.Text(self.right_frame, height=20)
self.result_text.pack(side=tk.TOP, padx=10, pady=10, fill=tk.BOTH, expand=True)
# 创建打开文件按钮
self.browse_btn = tk.Button(self.right_frame, text="打开文件", command=self.load_file)
self.browse_btn.pack(side=tk.LEFT, padx=10, pady=10)
# 创建分析按钮
self.analyze_btn = tk.Button(self.right_frame, text="分析", command=self.analyze)
self.analyze_btn.pack(side=tk.LEFT, padx=10, pady=10)
# 创建文件路径显示区域
self.filepath_frame = tk.Frame(self.right_frame)
self.filepath_frame.pack(side=tk.TOP, padx=10, pady=10, fill=tk.X)
self.filepath_label = tk.Label(self.filepath_frame, text="文件路径:", width=10)
self.filepath_label.pack(side=tk.LEFT)
self.filepath_entry = tk.Entry(self.filepath_frame, width=50)
self.filepath_entry.pack(side=tk.LEFT)
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() # 获取文件路径
algorithm = self.algorithm_var.get() # 获取选择的算法
word_length = int(self.word_length_entry.get()) # 获取单词长度设置
topn = int(self.topn_entry.get()) # 获取关键词数量的设置
pos_filters = [pos for pos, var in self.pos_vars.items() if var.get()] # 获取选中的词性过滤器
with open(filepath, "r", encoding="utf-8") as f:
content = f.read() # 读取文件内容
if algorithm == "tfidf":
keywords = jieba.analyse.extract_tags(content, topK=topn, withWeight=True)
else: # algorithm == "textrank"
keywords = jieba.analyse.textrank(content, topK=topn, withWeight=True)
filtered_keywords = []
for keyword, weight in keywords:
if len(keyword) >= word_length:
words_with_pos = pseg.cut(keyword) # 对关键词进行词性标注
pos_list = [w.flag for w in words_with_pos] # 获取词性列表
if all([pos in pos_filters for pos in pos_list]): # 检查词性是否符合设定的过滤器
filtered_keywords.append((keyword, weight, pos_list))
sorted_keywords = sorted(filtered_keywords, key=lambda x: -x[1]) # 根据权重对关键词进行排序
result_str = "前{}个关键词及其权重:\n".format(topn)
for i, (keyword, weight, pos_list) in enumerate(sorted_keywords[:topn]):
result_str += "{}. {}:{}\n".format(i+1, keyword, weight)
result_str += " 词性:{}\n".format(",".join(pos_list))
self.result_text.delete(1.0, tk.END) # 清空文本框内容
self.result_text.insert(tk.END, result_str) # 在文本框中显示结果
with open("guanjianci.txt", "w", encoding="utf-8") as f: # 将结果保存到文件中
for i, (keyword, weight, pos_list) in enumerate(sorted_keywords[:topn]):
f.write("{}\t{}\t{}\n".format(keyword, weight, ",".join(pos_list)))
def main():
window = tk.Tk() # 创建窗口对象
window.title("Jieba实例4提取关键词")
window.geometry("900x500") # 设置窗口大小
# 初始化KeywordExtractor对象并启动事件循环
keyword_extractor = KeywordExtractor(window)
window.mainloop()
if __name__ == "__main__":
main()

知识点

※Tkinter作为Python中用于创建GUI界面的标准工具包,提供了许多常用的功能。

  1. 创建窗口:使用Tk()函数创建一个窗口对象,并使用title()函数设置窗口标题。
  2. 添加组件:使用Frame、Label、Button、Entry等类来创建窗口中的各种组件,例如文本框、按钮和标签等。
  3. 布局管理:使用pack()、grid()或place()方法对组件进行布局管理,决定它们在窗口中的位置和大小。
  4. 事件处理:使用bind()方法将事件与相应的处理函数关联起来,当用户进行某些操作时,触发相应的事件并执行处理函数。
  5. 文件操作:可以使用filedialog模块中的函数,如askopenfilename()和asksaveasfilename(),打开文件选择对话框或保存文件对话框。
  6. 文本显示:通过Text组件可以在窗口中显示文本,可以使用insert()方法插入文本,delete()方法删除文本。
  7. 弹窗提示:使用messagebox模块中的函数,如showinfo()、showwarning()和showerror(),弹出消息提示框、警告框和错误框。
  8. 图形绘制:可以使用Canvas组件来绘制图形,如直线、矩形、圆等,使用create_line()、create_rectangle()、create_oval()等方法。
  9. 图片显示:可以使用PIL库(Python Imaging Library)加载图片,并使用PhotoImage类将图片显示在窗口中。
  10. 菜单和工具栏:使用Menu和Toolbar等类来创建菜单栏和工具栏,提供更多的操作选项和功能。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码