Python实战 | 本地文档关键词提取与摘要生成工具开发指南



背景介绍

在学习和办公场景中,我们常常需要快速理解大量文档的核心内容,但手动阅读和总结既耗时又低效。为了解决这一问题,我们可以开发一个本地文档关键词提取与摘要生成工具,帮助用户从 .txt.pdf 文件中提取关键词并生成简洁的摘要。

本项目使用 Python 编写,结合 Tkinter 构建图形界面,使用 jieba 提取中文关键词,使用 SnowNLP 生成摘要,具备以下特点:

  • 支持 .txt.pdf 文件输入
  • 自动提取关键词并排序
  • 自动生成文档摘要
  • 本地运行,无需联网

思路分析

1. 技术选型

  • GUI 构建:使用 Python 标准库 Tkinter,无需额外安装,适合快速开发。
  • PDF 文本提取:使用 PyPDF2pdfplumber 提取 .pdf 中的文本内容。
  • 中文分词与关键词提取:使用 jieba 库,支持 TF-IDF 和 TextRank 两种算法。
  • 摘要生成:使用 SnowNLP,基于 TextRank 算法生成摘要,适合中文处理。

2. 功能模块划分

  • 文件上传界面(GUI)
  • 文本提取模块(PDF / TXT)
  • 关键词提取模块(jieba)
  • 摘要生成模块(SnowNLP)
  • 结果展示模块(GUI)

代码实现

安装依赖

pip install jieba snownlp pdfplumber

完整代码(Python)

import tkinter as tk
from tkinter import filedialog, messagebox
import jieba.analyse
from snownlp import SnowNLP
import pdfplumber

# 提取文本内容
def extract_text_from_file(file_path):
    if file_path.endswith('.txt'):
        with open(file_path, 'r', encoding='utf-8') as f:
            return f.read()
    elif file_path.endswith('.pdf'):
        with pdfplumber.open(file_path) as pdf:
            text = ''
            for page in pdf.pages:
                text += page.extract_text()
            return text
    else:
        messagebox.showerror("错误", "不支持的文件格式!")
        return ""

# 提取关键词
def extract_keywords(text, topK=10):
    return jieba.analyse.extract_tags(text, topK=topK, withWeight=True)

# 生成摘要
def generate_summary(text, ratio=0.15):
    s = SnowNLP(text)
    summary = s.summary(ratio)
    return '。'.join(summary)

# GUI 界面
class DocumentAnalyzerApp:
    def __init__(self, root):
        self.root = root
        self.root.title("文档关键词提取与摘要生成工具")
        self.root.geometry("600x400")

        self.file_path = tk.StringVar()

        # 文件选择按钮
        tk.Label(root, text="选择文档文件:").pack(pady=5)
        self.file_entry = tk.Entry(root, textvariable=self.file_path, width=60)
        self.file_entry.pack(pady=5)
        tk.Button(root, text="浏览", command=self.select_file).pack(pady=5)

        # 提取关键词按钮
        tk.Button(root, text="提取关键词", command=self.show_keywords).pack(pady=10)
        self.keywords_text = tk.Text(root, height=10, width=70)
        self.keywords_text.pack(pady=5)

        # 生成摘要按钮
        tk.Button(root, text="生成摘要", command=self.show_summary).pack(pady=10)
        self.summary_text = tk.Text(root, height=10, width=70)
        self.summary_text.pack(pady=5)

    def select_file(self):
        file_path = filedialog.askopenfilename(filetypes=[("Text Files", "*.txt"), ("PDF Files", "*.pdf")])
        if file_path:
            self.file_path.set(file_path)

    def show_keywords(self):
        file_path = self.file_path.get()
        if not file_path:
            messagebox.showwarning("警告", "请先选择文件!")
            return

        text = extract_text_from_file(file_path)
        if not text.strip():
            messagebox.showwarning("警告", "文件内容为空!")
            return

        keywords = extract_keywords(text, topK=10)
        self.keywords_text.delete(1.0, tk.END)
        self.keywords_text.insert(tk.END, "提取的关键词:\n")
        for word, weight in keywords:
            self.keywords_text.insert(tk.END, f"{word}(权重: {weight:.4f})\n")

    def show_summary(self):
        file_path = self.file_path.get()
        if not file_path:
            messagebox.showwarning("警告", "请先选择文件!")
            return

        text = extract_text_from_file(file_path)
        if not text.strip():
            messagebox.showwarning("警告", "文件内容为空!")
            return

        summary = generate_summary(text)
        self.summary_text.delete(1.0, tk.END)
        self.summary_text.insert(tk.END, "生成的摘要:\n" + summary)

# 启动应用
if __name__ == "__main__":
    root = tk.Tk()
    app = DocumentAnalyzerApp(root)
    root.mainloop()

示例运行说明

  1. 运行方式
    直接运行上述 Python 脚本即可启动图形界面。

  2. 操作步骤

    • 点击“浏览”按钮,选择 .txt.pdf 文件。
    • 点击“提取关键词”按钮,查看提取的关键词及其权重。
    • 点击“生成摘要”按钮,查看生成的摘要内容。
  3. 输入示例
    • 文件内容(500 字以上):
      人工智能在医疗领域中被广泛应用于影像诊断和疾病预测。通过深度学习技术,AI 能够快速分析大量医学数据,辅助医生提高诊断效率。然而,数据隐私和模型可解释性仍是亟待解决的问题。
  4. 输出示例
    • 关键词:
      人工智能(权重: 0.1234)
      医疗(权重: 0.0987)
      深度学习(权重: 0.0876)
      诊断(权重: 0.0765)
      数据隐私(权重: 0.0654)
    • 摘要:
      人工智能在医疗领域中被广泛应用于影像诊断和疾病预测。通过深度学习技术,AI 能够快速分析大量医学数据,辅助医生提高诊断效率。然而,数据隐私和模型可解释性仍是亟待解决的问题。

总结

本项目通过 Python 实现了一个本地文档关键词提取与摘要生成工具,具备以下学习价值:

  • 文件读写与文本处理:支持 .txt.pdf 格式文件的读取。
  • NLP 应用:使用 jieba 提取关键词,使用 SnowNLP 生成摘要。
  • GUI 设计:使用 Tkinter 构建用户交互界面,适合初学者学习图形化开发。
  • 实际应用场景:适用于学习、办公、研究等场景,提升信息处理效率。

通过本项目,开发者可以掌握文本处理、NLP 技术和 GUI 开发的基础技能,为后续更复杂的 AI 应用打下坚实基础。


如需扩展功能,可考虑以下方向:

  • 支持 .docx 文件解析(使用 python-docx
  • 使用 HuggingFace 的 T5 模型生成更高质量的摘要
  • 添加导出功能,将关键词和摘要保存为 .txt.md 文件

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注