背景介绍
在学习和办公场景中,我们常常需要快速理解大量文档的核心内容,但手动阅读和总结既耗时又低效。为了解决这一问题,我们可以开发一个本地文档关键词提取与摘要生成工具,帮助用户从 .txt 或 .pdf 文件中提取关键词并生成简洁的摘要。
本项目使用 Python 编写,结合 Tkinter 构建图形界面,使用 jieba 提取中文关键词,使用 SnowNLP 生成摘要,具备以下特点:
- 支持
.txt和.pdf文件输入 - 自动提取关键词并排序
- 自动生成文档摘要
- 本地运行,无需联网
思路分析
1. 技术选型
- GUI 构建:使用 Python 标准库
Tkinter,无需额外安装,适合快速开发。 - PDF 文本提取:使用
PyPDF2或pdfplumber提取.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()
示例运行说明
- 运行方式
直接运行上述 Python 脚本即可启动图形界面。 -
操作步骤
- 点击“浏览”按钮,选择
.txt或.pdf文件。 - 点击“提取关键词”按钮,查看提取的关键词及其权重。
- 点击“生成摘要”按钮,查看生成的摘要内容。
- 点击“浏览”按钮,选择
- 输入示例
- 文件内容(500 字以上):
人工智能在医疗领域中被广泛应用于影像诊断和疾病预测。通过深度学习技术,AI 能够快速分析大量医学数据,辅助医生提高诊断效率。然而,数据隐私和模型可解释性仍是亟待解决的问题。
- 文件内容(500 字以上):
- 输出示例
- 关键词:
人工智能(权重: 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文件