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



一、背景介绍:提升PDF阅读效率的智能高亮工具

在办公、学习和项目管理中,PDF文件因其格式稳定、兼容性强而被广泛使用。然而,面对大量PDF文档,尤其是合同、报告、会议纪要等结构化或半结构化内容时,用户往往需要快速定位关键信息,如“项目进度”、“预算分配”、“风险评估”等。传统的手动查找方式不仅耗时,还容易遗漏重要内容,影响工作效率。

为了解决这一问题,我们设计并实现了一个基于Python的智能PDF内容提取与关键词高亮工具。该工具能够自动扫描指定目录中的PDF文件,提取其中的文本内容,并根据用户提供的关键词列表,对匹配内容进行高亮标注,生成新的PDF文件,便于用户快速定位和查阅关键信息。


二、思路分析:如何构建一个PDF关键词高亮工具

构建该工具的核心思路如下:

  1. 文件扫描:使用Python的os模块遍历指定目录,找到所有PDF文件;
  2. 文本提取与匹配:使用PyMuPDF(fitz)读取PDF内容,并通过关键词匹配查找目标文本;
  3. 高亮标注:在PDF中对匹配到的关键词添加高亮注释;
  4. 输出处理:将处理后的PDF保存到指定目录,保留原始结构;
  5. 日志记录:使用logging模块记录处理过程,便于调试与追踪;
  6. 命令行交互:使用argparse模块解析用户输入参数,实现灵活配置。

整个流程设计简洁、高效,适合开发者快速上手并扩展功能。


三、代码实现:Python脚本实现PDF关键词高亮

以下是完整的Python脚本实现,使用了PyMuPDF库进行PDF内容处理,并通过命令行参数控制输入输出。

import os
import argparse
import logging
import fitz  # PyMuPDF
from pathlib import Path

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

class PDFKeywordHighlighter:
    def __init__(self, source_dir, keywords, output_dir=None):
        self.source_dir = source_dir
        self.keywords = [kw.strip() for kw in keywords.split(',')]
        self.output_dir = output_dir if output_dir else Path(source_dir) / "highlighted"
        self.pdf_files = []

    def scan_files(self):
        """扫描指定目录中的PDF文件"""
        if not os.path.exists(self.source_dir):
            logging.error(f"目录不存在: {self.source_dir}")
            print(f"❌ 目录不存在: {self.source_dir}")
            return

        print(f"📁 正在扫描目录: {self.source_dir}")
        for root, dirs, files in os.walk(self.source_dir):
            for file in files:
                if file.lower().endswith(".pdf"):
                    self.pdf_files.append(os.path.join(root, file))
                    logging.info(f"找到PDF文件: {os.path.join(root, file)}")

    def highlight_keywords(self, input_path, output_path):
        """对PDF中的关键词进行高亮标注"""
        try:
            doc = fitz.open(input_path)
            for page in doc:
                for keyword in self.keywords:
                    # 查找关键词在页面中的位置
                    matches = page.search_for(keyword)
                    for inst in matches:
                        # 添加高亮注释
                        page.add_highlight_annot(inst)
            doc.save(output_path, garbage=4, deflate=True)
            doc.close()
            logging.info(f"已处理文件: {input_path} → {output_path}")
            print(f"✅ 已处理文件: {input_path} → {output_path}")
        except Exception as e:
            logging.error(f"处理文件失败: {input_path} - {str(e)}")
            print(f"❌ 处理文件失败: {input_path} - {str(e)}")

    def process_files(self):
        """批量处理PDF文件"""
        if not self.pdf_files:
            print("✅ 没有找到可处理的PDF文件。")
            return

        if not self.output_dir.exists():
            self.output_dir.mkdir(parents=True, exist_ok=True)
            logging.info(f"创建输出目录: {self.output_dir}")
            print(f"📁 创建输出目录: {self.output_dir}")

        print(f"🔍 正在高亮关键词: {', '.join(self.keywords)}")
        for file in self.pdf_files:
            base_name = os.path.basename(file)
            output_file = os.path.join(self.output_dir, f"{os.path.splitext(base_name)[0]}_highlighted.pdf")
            self.highlight_keywords(file, output_file)

        print(f"✅ 高亮完成,共处理 {len(self.pdf_files)} 个PDF文件。")

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='基于Python的智能PDF内容提取与关键词高亮工具')
    parser.add_argument('-d', '--directory', required=True, help='要扫描的PDF文件目录路径')
    parser.add_argument('-k', '--keywords', required=True, help='要高亮的关键词列表(逗号分隔)')
    parser.add_argument('-o', '--output', help='高亮后的PDF输出目录(可选,默认为当前目录下的highlighted文件夹)')

    args = parser.parse_args()

    highlighter = PDFKeywordHighlighter(args.directory, args.keywords, args.output)
    highlighter.scan_files()
    highlighter.process_files()

四、运行说明与示例

1. 安装依赖

确保已安装Python 3.8及以上版本,然后安装PyMuPDF库:

pip install pymupdf

2. 运行方式

在命令行中运行脚本,传入目录、关键词和输出路径:

python pdf_highlighter.py -d C:\Documents -k "项目进度,风险评估,预算分配" -o C:\HighlightedDocs

3. 输出结果

  • 控制台输出示例:
    📁 正在扫描目录: C:\Documents
    📄 找到PDF文件: C:\Documents\report1.pdf
    📄 找到PDF文件: C:\Documents\meeting_minutes.pdf
    📄 找到PDF文件: C:\Documents\project_plan.pdf
    🔍 正在高亮关键词: 项目进度, 风险评估, 预算分配
    ✅ 已处理文件: C:\Documents\report1.pdf → C:\HighlightedDocs\report1_highlighted.pdf
    ✅ 已处理文件: C:\Documents\meeting_minutes.pdf → C:\HighlightedDocs\meeting_minutes_highlighted.pdf
    ✅ 已处理文件: C:\Documents\project_plan.pdf → C:\HighlightedDocs\project_plan_highlighted.pdf
    ✅ 高亮完成,共处理 3 个PDF文件。
    
  • 日志文件 pdf_highlighter.log 示例内容:
    2025-12-18 05:10:50 - INFO - 正在扫描目录: C:\Documents
    2025-12-18 05:10:51 - INFO - 找到PDF文件: C:\Documents\report1.pdf
    2025-12-18 05:10:52 - INFO - 找到PDF文件: C:\Documents\meeting_minutes.pdf
    2025-12-18 05:10:53 - INFO - 找到PDF文件: C:\Documents\project_plan.pdf
    2025-12-18 05:10:54 - INFO - 正在高亮关键词: 项目进度, 风险评估, 预算分配
    2025-12-18 05:10:55 - INFO - 已处理文件: C:\Documents\report1.pdf → C:\HighlightedDocs\report1_highlighted.pdf
    2025-12-18 05:10:56 - INFO - 已处理文件: C:\Documents\meeting_minutes.pdf → C:\HighlightedDocs\meeting_minutes_highlighted.pdf
    2025-12-18 05:10:57 - INFO - 已处理文件: C:\Documents\project_plan.pdf → C:\HighlightedDocs\project_plan_highlighted.pdf
    2025-12-18 05:10:58 - INFO - 高亮完成,共处理 3 个PDF文件。
    

五、项目结构与注意事项

项目结构示例:

pdf_highlighter/
│
├── pdf_highlighter.py
├── pdf_highlighter.log
└── Documents/
    ├── report1.pdf
    ├── meeting_minutes.pdf
    └── project_plan.pdf

注意事项:

  • 该工具不会修改原始PDF文件,而是生成新的高亮版本;
  • 支持中文、英文等多语言关键词匹配
  • 可通过扩展实现正则表达式匹配颜色自定义高亮OCR识别等功能;
  • 建议首次运行时使用测试目录,避免误操作原始文件。

六、学习价值与扩展建议

学习价值:

  • PDF内容处理:学习使用PyMuPDF进行PDF的读取、文本查找与高亮;
  • 文本匹配与注释添加:掌握如何在PDF中添加高亮注释;
  • 日志记录与异常处理:使用logging模块记录操作过程,使用try...except保证脚本稳定性;
  • 命令行交互设计:使用argparse模块实现灵活的参数输入;
  • 文件系统操作:学习目录遍历、文件读写等基础技能。

扩展建议:

  • 支持正则表达式:允许用户输入正则表达式进行更灵活的匹配;
  • 支持颜色自定义:允许用户选择不同颜色进行高亮;
  • 支持图形界面:使用tkinterPyQt构建可视化操作界面;
  • 支持OCR识别:集成pytesseract处理扫描件PDF中的文本;
  • 支持导出HTML或Markdown:将高亮内容导出为网页或文本格式,便于分享和归档。

七、总结

本项目实现了一个基于Python的智能PDF内容提取与关键词高亮工具,能够自动扫描PDF目录,提取内容并根据关键词进行高亮标注,极大提升了PDF文档的可读性与检索效率。

通过该项目,开发者可以掌握PDF处理、文本匹配、日志记录、命令行交互等实用技能,为后续开发更复杂的数据处理工具或文档管理系统奠定基础。该工具不仅具备实际应用场景,也具有良好的可扩展性,适合进一步深入学习与开发。

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


发表回复

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