开发一个基于本地文件的“简易AI文本摘要工具”



背景介绍

在当今信息爆炸的时代,人们常常需要处理大量文本数据,例如论文、报告、会议记录等。手动提取关键信息不仅费时费力,而且容易遗漏重点。因此,开发一个能够自动提取文本摘要的工具变得尤为重要。

本文将介绍如何使用Python开发一个“简易AI文本摘要工具”,该工具能够读取本地文本文件(如.txt.docx),利用基于TF-IDF的关键词提取技术,生成简洁的摘要内容,并将结果保存到本地文件中。该工具适合中级以下开发者学习,具备一定的实践价值和学习意义。


思路分析

本项目的目标是实现一个能够处理本地文本文件并生成摘要的工具。以下是实现的基本思路:

  1. 文件读取:支持读取.txt.docx格式的文本文件。
  2. 文本预处理:对读取的文本进行清洗,去除标点、停用词等。
  3. 关键词提取:使用TF-IDF算法提取文本中的关键词。
  4. 句子摘要生成:根据关键词筛选出最相关的句子,组成摘要。
  5. 输出结果:将生成的摘要保存到本地文件中。

核心技术点包括:文件读写、自然语言处理(NLP)、TF-IDF算法、文本摘要逻辑。


代码实现

以下是一个完整的Python实现示例,使用了nltkscikit-learn库来处理文本。

1. 安装依赖

在运行代码之前,请确保安装以下Python库:

pip install nltk scikit-learn python-docx

2. Python代码实现

import nltk
from nltk.corpus import stopwords
from nltk.tokenize import sent_tokenize, word_tokenize
from sklearn.feature_extraction.text import TfidfVectorizer
import docx
import os

# 下载nltk所需资源
nltk.download('punkt')
nltk.download('stopwords')

def read_text_file(file_path):
    """读取.txt文件内容"""
    with open(file_path, 'r', encoding='utf-8') as f:
        return f.read()

def read_docx_file(file_path):
    """读取.docx文件内容"""
    doc = docx.Document(file_path)
    text = []
    for para in doc.paragraphs:
        text.append(para.text)
    return '\n'.join(text)

def preprocess_text(text):
    """文本预处理:分句、分词、去除停用词"""
    sentences = sent_tokenize(text)
    words = word_tokenize(text.lower())
    stop_words = set(stopwords.words('english'))
    filtered_words = [word for word in words if word.isalnum() and word not in stop_words]
    return sentences, filtered_words

def extract_keywords(text, top_n=5):
    """使用TF-IDF提取关键词"""
    vectorizer = TfidfVectorizer()
    tfidf_matrix = vectorizer.fit_transform([text])
    feature_names = vectorizer.get_feature_names_out()
    tfidf_scores = tfidf_matrix.toarray()[0]
    # 按TF-IDF分数排序,取前top_n个关键词
    sorted_indices = tfidf_scores.argsort()[::-1]
    keywords = [feature_names[i] for i in sorted_indices[:top_n]]
    return keywords

def generate_summary(text, keywords):
    """根据关键词生成摘要:提取包含关键词的句子"""
    sentences, words = preprocess_text(text)
    summary_sentences = [sentence for sentence in sentences if any(word in sentence.lower() for word in keywords)]
    return ' '.join(summary_sentences)

def save_summary(summary, output_file):
    """将摘要保存到本地文件"""
    with open(output_file, 'w', encoding='utf-8') as f:
        f.write(summary)

def main(input_file, output_file):
    # 根据文件类型读取内容
    if input_file.endswith('.txt'):
        text = read_text_file(input_file)
    elif input_file.endswith('.docx'):
        text = read_docx_file(input_file)
    else:
        print("不支持的文件格式")
        return

    # 提取关键词
    keywords = extract_keywords(text)
    print("提取的关键词:", keywords)

    # 生成摘要
    summary = generate_summary(text, keywords)
    print("生成的摘要:", summary)

    # 保存摘要到文件
    save_summary(summary, output_file)
    print(f"摘要已保存到:{output_file}")

if __name__ == "__main__":
    # 示例输入输出路径
    input_file = 'example.txt'  # 替换为你的文本文件路径
    output_file = 'summary.txt'  # 生成的摘要文件路径
    main(input_file, output_file)

代码说明

  • 文件读取:通过read_text_fileread_docx_file函数分别读取.txt.docx文件。
  • 文本预处理:使用nltk进行分句和分词,过滤停用词和非字母数字字符。
  • 关键词提取:使用TfidfVectorizer计算TF-IDF分数,提取最相关的关键词。
  • 摘要生成:通过筛选包含关键词的句子,生成摘要内容。
  • 输出结果:将摘要写入到指定的输出文件中。

总结

本文介绍了一个基于本地文件的“简易AI文本摘要工具”的开发过程。通过使用Python的nltkscikit-learn库,我们实现了从文件读取、文本预处理、关键词提取到摘要生成的完整流程。该工具不仅具备一定的学习价值,还能作为实际应用中的辅助工具,帮助用户快速提取文本核心信息。

如果你对更高级的摘要技术(如使用深度学习模型或RAG技术)感兴趣,可以参考本文中提到的LangGraph和AiOnly平台的实战教程,进一步扩展功能。希望这篇文章能够帮助你更好地理解NLP在实际项目中的应用!


发表回复

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