TXT文件生成词云图python代码制作和柱状图源码和生成好的exe文件

今天要交作业并打包成exe文件

源码参考链接:https://pan.baidu.com/s/18oE308_NVNPaCOACw_H5Hw?pwd=abc1 

步骤 1: 安装所需的库 确保你已经安装了所需的库,包括tkinterwordcloudmatplotlib。你可以使用以下命令在终端或命令提示符中安装它们:安装过也可以输入命令不会重复安装。

pip install tkinter wordcloud matplotlib 

步骤 2: 创建一个新的Python文件 在你的编辑器中创建一个新的Python文件,例如BBB.py

步骤 3: 复制并粘贴代码 将提供的代码复制并粘贴到你创建的Python文件中。

步骤 4: 运行代码 BBB.py

下面是具体解释:

这段代码是一个文本分析工具的图形用户界面(GUI)程序。它使用了Python的tkinter库来创建窗口和界面组件,并结合了其他库如collectionswordcloudmatplotlib来进行文本处理和可视化。

主要功能包括:

  1. 选择要处理的文本文件(.txt格式)。
  2. 统计文件中单词的频次并显示频次最高的前十个单词。
  3. 在窗口中显示原始文本内容。
  4. 生成柱状图展示单词频次。
  5. 生成词云图展示单词频次。

代码的主要组成部分和功能如下:

  • display_text(text): 在新的顶层窗口中显示给定的文本。
  • count_words(filename): 统计给定文件中单词的频次,并返回频次最高的前十个单词的结果。
  • plot_word_counts(sorted_word_counts): 绘制柱状图展示单词频次。
  • select_file(): 弹出文件选择对话框,选择要处理的文本文件。
  • display_text_in_window(text): 在窗口中显示给定的文本。
  • get(): 获取用户输入的文件路径,对文件进行处理,并在窗口中显示结果。
  • plot_word_counts2(): 获取文件路径,进行单词频次统计,并生成柱状图展示结果。
  • cloud2(): 获取文件路径,读取文件内容,统计词语频次,并生成词云图展示结果。

程序的主要逻辑是创建一个窗口,其中包含选择文件的按钮、输入文件路径的文本框、开始按钮和清空按钮。用户选择文件后,点击开始按钮会执行相应的处理函数,对文件进行统计和可视化操作。

整体而言,这段代码实现了一个简单的文本分析工具的图形界面,方便用户选择文件、分析文本并生成可视化结果。

一直提示词云字体错误

pip install --upgrade wordcloud pillow

用这个命令升级了一下这两个把库就成功运行了,这是代码

词云的字体大小也得重新设置一下。

import tkinter
import collections
import wordcloud
import matplotlib
import re
import tkinter as tk
import tkinter.filedialog as filedialog
from collections import Counter
import matplotlib.pyplot as plt
import tkinter.messagebox as messagebox
import os
from wordcloud import WordCloud
stopwords=None

def display_text(text):
    root = tk.Toplevel()  # 创建一个新的顶层窗口
    root.title("文本可视化")
    root['background'] = 'lightblue'
    root.attributes('-alpha', 0.9)

    # 创建一个文本框
    text_box = tk.Text(root, height=10, width=50, fg='purple', bg='lightblue')
    text_box.pack()

    # 在文本框中插入生成的文本
    text_box.insert(tk.END, text)

    # 设置文本框内容居中竖直排列
    text_box.tag_configure("center", justify='center')
    text_box.tag_add("center", "1.0", "end")

    # 创建一个滚动条并将其绑定到文本框
    scroll_bar = tk.Scrollbar(root)
    scroll_bar.pack(side=tk.RIGHT, fill=tk.Y)
    scroll_bar.config(command=text_box.yview)

    text_box.config(yscrollcommand=scroll_bar.set)

    # 创建柱状图按钮
    next_button = tk.Button(root, text="生成柱状图", command=plot_word_counts2, fg='purple', bg='lightblue')
    next_button.pack(pady=10)
    # 创建词云图按钮
    next_button2 = tk.Button(root, text="生成词云图", command=cloud2, fg='purple', bg='lightblue')
    next_button2.pack(before=next_button, side='left', padx=60, pady=10)

    # 运行GUI窗口
    root.mainloop()


def count_words(filename):
    # 读取文件内容
    with open(filename, 'r') as file:
        text = file.read()

    # 使用正则表达式分解出单词列表
    words = re.findall(r'\b\w+\b', text)

    # 统计单词频次
    word_counts = Counter(words)

    # 按单词频次逆序输出结果
    sorted_word_counts = sorted(word_counts.items(), key=lambda x: x[1], reverse=True)

    # 输出TOP10单词词频
    top_10_words = sorted_word_counts[:10]
    print("以下为频次top10的单词频次:")
    for word, count in top_10_words:
        print(count, word)

    return sorted_word_counts[:10]  # 仅取前10个单词词频结果


def plot_word_counts(sorted_word_counts):
    # 获取TOP10单词和词频
    top_10_words = [word for word, _ in sorted_word_counts]
    top_10_counts = [count for _, count in sorted_word_counts]

    # 仅绘制TOP10的柱状图
    plt.bar(top_10_words, top_10_counts)
    plt.xlabel('Words')
    plt.ylabel('Counts')
    plt.title('Top 10 Word Counts')
    plt.xticks(rotation=45)
    plt.show()


def select_file():
    file_path = filedialog.askopenfilename(title="选择要处理的txt文件", filetypes=[("Text Files", "*.txt")])
    e_00.delete(0, tk.END)
    e_00.insert(tk.END, file_path)


def display_text_in_window(text):
    display_text(text)


def get():
    file_path = e_00.get()  # 获取文件路径
    if not os.path.isfile(file_path):
        messagebox.showwarning("警告", "请输入有效的文件路径")
        return

    result = count_words(file_path)

    # 调用函数将文本结果可视化
    formatted_text = ""
    for word, count in result:
        formatted_text += f"{count} {word}\n"
    display_text(formatted_text)


def plot_word_counts2():
    file_path = e_00.get()  # 获取文件路径
    if not os.path.isfile(file_path):
        messagebox.showwarning("警告", "请输入有效的文件路径")
        return

    result = count_words(file_path)

    plot_word_counts(result)  # 绘制柱状图


def cloud2():
    file_path = e_00.get()  # 获取文件路径
    if not os.path.isfile(file_path):
        messagebox.showwarning("警告", "请输入有效的文件路径")
        return

    # 读取文件内容
    with open(file_path, 'r') as file:
        text = file.read()

    # 使用正则表达式分解出词语列表
    words = re.findall(r'\b\w+\b', text)

    # 统计词语频次
    word_counts = Counter(words)

    # 创建词云对象并生成词云图像
    wc = WordCloud(font_path=r'C:\Windows\Fonts\Arial.ttf')
    wc.generate_from_frequencies(word_counts)

    # 调整字体大小
    wc.recolor(random_state=42, colormap='Pastel1')

    # 显示词云图像
    plt.imshow(wc, interpolation='bilinear')
    plt.axis('off')
    plt.show()



window = tk.Tk()
window.title("txt文件查找")
window['background'] = 'lightblue'
window.attributes('-alpha', 0.8)
# label标签框的设置
l_00 = tk.Label(window, text="请选择txt文件路径(此操作将会显示文件top10的频次单词)", font=("微软雅黑", 12), fg='purple', bg='lightblue')
l_00.pack(pady=10)
# 设置输入框
e_00 = tk.Entry(window, font=("微软雅黑", 20))
e_00.pack()
# 设置选择文件按钮
select_file_button = tk.Button(window, text="选择文件", command=select_file, bg='lightyellow', fg='purple')
select_file_button.pack(pady=10)
# 设置开始按钮
b1 = tk.Button(window, text="开始", command=get, bg='lightyellow', fg='purple')
b1.pack(pady=10)


# 设置清空按钮
def ok():
    e_00.delete(0, tk.END)


b2 = tk.Button(window, text="清空", command=ok, bg='lightyellow', fg='purple')
b2.pack(before=b1, side='left', padx=80, pady=10)


# 关闭按钮的设置
def callbackClose():
    if messagebox.askokcancel("关闭窗口", "你确定要关闭窗口吗?"):
        window.destroy()


window.protocol("WM_DELETE_WINDOW", callbackClose)

window.mainloop()

下期想看什么评论区告诉我

猜你喜欢

转载自blog.csdn.net/weixin_55008315/article/details/131685108