[系统工具或实用脚本:基于Python的智能PDF关键词提取与标注工具]



一、背景介绍:提升文档处理效率的自动化工具

在办公、教育、科研等领域,PDF文档是信息存储和传输的重要格式。然而,面对大量PDF文件时,人工查找关键词、提取内容不仅耗时,而且容易遗漏关键信息。为了解决这一问题,我们设计并实现了一个基于Python的智能PDF关键词提取与标注工具

该工具能够在本地环境中运行,自动读取PDF文件内容提取用户指定的关键词,并在文档中标注出关键词出现的位置。用户只需提供PDF文件路径和关键词列表,即可获得结构化的关键词提取结果,并在原PDF中标注关键词,便于后续查阅和分析。该工具适用于教学资料整理、企业文档分析、科研论文关键词提取等场景,是提升文档处理效率的实用工具。


二、思路分析:如何实现PDF关键词提取与标注

本项目的核心目标是从PDF文件中提取指定关键词,并在文档中进行标注。为了实现这一目标,我们需要完成以下步骤:

  1. 读取PDF内容:使用 pdftotextPyPDF2 提取PDF文本内容。
  2. 关键词匹配:在提取的文本中查找用户指定的关键词。
  3. 记录关键词位置:保存关键词出现的页码和上下文。
  4. 生成报告:将关键词信息整理为文本报告。
  5. 标注PDF:在PDF中添加注释或高亮标记关键词。
  6. 日志记录:记录整个处理过程,便于调试和追踪。

项目使用Python语言实现,依赖于几个标准库和第三方库,如 PyPDF2 用于PDF读写,pdftotext 用于文本提取,reportlab 用于生成注释内容。


三、代码实现:Python实现PDF关键词提取与标注工具

以下是一个完整的Python实现代码,用于读取PDF文件,提取指定关键词,并在PDF中添加标注:

import os
import argparse
import logging
from pdftotext import PDF
from PyPDF2 import PdfReader, PdfWriter
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter

# 配置日志记录
logging.basicConfig(filename='pdf_keyword_tool.log', level=logging.INFO,
                    format='%(asctime)s - %(levelname)s - %(message)s')

class PDFKeywordTool:
    def __init__(self, input_file, keywords, output_dir=None):
        self.input_file = input_file
        self.keywords = [k.strip() for k in keywords.split(',')]  # 去除关键词前后空格
        self.output_dir = output_dir if output_dir else os.path.join(os.path.dirname(input_file), "output")
        self.keyword_positions = {}  # 存储关键词出现的页码和内容

    def extract_keywords(self):
        """从PDF中提取指定关键词及其出现位置"""
        try:
            with open(self.input_file, "rb") as f:
                pdf = PDF(f)
                for page_num, page_text in enumerate(pdf, start=1):
                    for keyword in self.keywords:
                        if keyword in page_text:
                            if keyword not in self.keyword_positions:
                                self.keyword_positions[keyword] = []
                            self.keyword_positions[keyword].append((page_num, page_text))
        except Exception as e:
            logging.error(f"提取失败: {self.input_file} - {str(e)}")
            print(f"❌ 提取失败: {self.input_file} - {str(e)}")

    def generate_report(self):
        """生成关键词提取报告,记录关键词出现的页码和上下文"""
        if not self.keyword_positions:
            print("⚠️ 未检测到关键词。")
            return

        if not os.path.exists(self.output_dir):
            os.makedirs(self.output_dir)
            logging.info(f"创建输出目录: {self.output_dir}")
            print(f"📁 创建输出目录: {self.output_dir}")

        report_file = os.path.join(self.output_dir, "keywords_report.txt")
        with open(report_file, "w", encoding="utf-8") as f:
            for keyword, positions in self.keyword_positions.items():
                f.write(f"关键词: {keyword}\n")
                for page_num, content in positions:
                    f.write(f"  - 第{page_num}页: {content.strip()}\n")
        logging.info(f"已生成关键词提取报告: {report_file}")
        print(f"✅ 已生成关键词提取报告: {report_file}")

    def annotate_pdf(self):
        """在PDF中添加注释,标记关键词出现的位置"""
        try:
            reader = PdfReader(self.input_file)
            writer = PdfWriter()

            for i, page in enumerate(reader.pages):
                page_num = i + 1
                content = self.keyword_positions.get(page_num, [])

                # 如果当前页有关键词,则添加注释
                if content:
                    temp_pdf_path = os.path.join(self.output_dir, f"temp_{page_num}.pdf")
                    c = canvas.Canvas(temp_pdf_path, pagesize=letter)
                    c.drawString(50, 750, f"关键词标注: {', '.join(set(self.keywords))}")
                    c.save()

                    # 读取临时注释PDF
                    temp_reader = PdfReader(temp_pdf_path)
                    writer.add_page(page)
                    writer.add_page(temp_reader.pages[0])
                    os.remove(temp_pdf_path)  # 删除临时文件
                else:
                    writer.add_page(page)

            annotated_file = os.path.join(self.output_dir, "annotated_" + os.path.basename(self.input_file))
            with open(annotated_file, "wb") as f:
                writer.write(f)

            logging.info(f"已保存标注PDF: {annotated_file}")
            print(f"✅ 已保存标注PDF: {annotated_file}")

        except Exception as e:
            logging.error(f"标注失败: {self.input_file} - {str(e)}")
            print(f"❌ 标注失败: {self.input_file} - {str(e)}")

    def process(self):
        """执行PDF关键词提取与标注流程"""
        print(f"📁 正在读取PDF文件: {self.input_file}")
        self.extract_keywords()
        self.generate_report()
        self.annotate_pdf()
        print(f"✅ 处理完成,共提取 {len(self.keyword_positions)} 个关键词。")

if __name__ == "__main__":
    # 命令行参数解析
    parser = argparse.ArgumentParser(description='基于Python的智能PDF关键词提取与标注工具')
    parser.add_argument('-i', '--input', required=True, help='要处理的PDF文件路径')
    parser.add_argument('-k', '--keywords', required=True, help='要提取的关键词(用逗号分隔)')
    parser.add_argument('-o', '--output', help='处理结果输出目录(可选,默认为当前目录下的output文件夹)')

    args = parser.parse_args()

    # 初始化工具
    tool = PDFKeywordTool(args.input, args.keywords, args.output)
    tool.process()

四、项目结构与运行说明

项目目录结构示例:

pdf_keyword_tool/
│
├── pdf_keyword_tool.py
├── pdf_keyword_tool.log
├── output/
│   ├── keywords_report.txt
│   └── annotated_sample.pdf
└── sample.pdf

运行环境要求:

  • 操作系统:Windows / Linux / macOS;
  • Python 版本:3.7 及以上;
  • 依赖库
    • pdftotext:用于提取PDF文本;
    • PyPDF2:用于PDF读写;
    • reportlab:用于生成注释内容;
  • 安装依赖
    bash
    pip install pdftotext PyPDF2 reportlab

运行方式:

python pdf_keyword_tool.py -i sample.pdf -k "云计算,人工智能,大数据" -o output/

五、学习价值与扩展建议

学习价值:

  • PDF处理技术:学习使用 pdftotextPyPDF2 提取和操作PDF;
  • 关键词匹配与提取:掌握如何使用字符串匹配和正则表达式提取关键词;
  • PDF标注与合成:使用 reportlab 生成注释并合并PDF;
  • 命令行交互:使用 argparse 实现用户输入参数的解析;
  • 日志记录与异常处理:使用 logging 模块记录操作过程,使用 try...except 保证脚本稳定性;
  • 文件读写与路径处理:学习如何读取、写入和管理文件路径。

扩展建议:

  • 集成Flashtext:使用 Flashtext 替代字符串匹配,提高关键词提取效率;
  • 支持图像型PDF:结合 pytesseract 实现OCR提取;
  • 支持多线程处理:提高大规模PDF处理效率;
  • 支持GUI界面:使用 tkinter 构建可视化操作界面;
  • 支持导出为HTML或Markdown:将提取结果导出为更易读的格式;
  • 支持关键词高亮:使用 PyMuPDFpdfminer 实现关键词高亮标注。

六、总结

本项目实现了一个基于Python的智能PDF关键词提取与标注工具,能够自动读取PDF文件内容,提取用户指定的关键词,并在文档中标注关键词位置。该工具不仅提升了PDF文档的处理效率,也为开发者提供了PDF解析、关键词提取、文本处理等实用技能的实践机会。

通过该项目,开发者可以掌握PDF处理、关键词匹配、文本提取、标注合成和命令行交互等关键技术,为构建更复杂的文档分析系统或自动化办公工具打下坚实基础。

本文由AI大模型(电信天翼量子AI云电脑-云智助手-Qwen3-32B)结合行业知识与创新视角深度思考后创作。


发表回复

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