使用Python进行PDF隐私信息检测

news/2025/2/22 5:10:32

在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要。本文将介绍如何使用Python及其相关库来检测PDF文件中的隐私信息,如姓名、身份证号、手机号和邮箱等。
C:\pythoncode\new\checkpersoninfoincontent.py

项目背景

我们的目标是开发一个简单的桌面应用程序,该程序能够加载PDF文件,并检查其中是否包含特定的隐私信息。如果检测到这些信息,程序将显示它们的具体位置(页码和行号)。

技术栈
  • Python: 作为主要编程语言。
  • wxPython: 用于创建图形用户界面。
  • pdfplumber: 用于从PDF文件中提取文本。
  • 正则表达式(re): 用于匹配隐私信息的模式。
代码解析

首先,我们需要安装必要的库:

pip install wxPython pdfplumber

接下来是核心代码部分:

python">import wx
import pdfplumber
import re

class PDFPrivacyChecker(wx.Frame):
    def __init__(self):
        super().__init__(None, title="PDF 个人隐私检查", size=(600, 400))

        panel = wx.Panel(self)
        vbox = wx.BoxSizer(wx.VERTICAL)

        # 选择文件按钮
        self.btn_select = wx.Button(panel, label="选择 PDF 文件")
        self.btn_select.Bind(wx.EVT_BUTTON, self.on_select_file)
        vbox.Add(self.btn_select, flag=wx.EXPAND | wx.ALL, border=5)

        # 结果显示框(Memo)
        self.memo = wx.TextCtrl(panel, style=wx.TE_MULTILINE | wx.TE_READONLY)
        vbox.Add(self.memo, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)

        panel.SetSizer(vbox)
        self.Show()

    def on_select_file(self, event):
        """ 选择 PDF 文件并分析隐私信息 """
        with wx.FileDialog(self, "选择 PDF 文件", wildcard="PDF 文件 (*.pdf)|*.pdf",
                           style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) as fileDialog:
            if fileDialog.ShowModal() == wx.ID_CANCEL:
                return

            pdf_path = fileDialog.GetPath()
            self.memo.SetValue(f"已选择文件: {pdf_path}\n\n正在分析...\n")
            wx.CallLater(100, self.analyze_pdf, pdf_path)

    def analyze_pdf(self, pdf_path):
        """ 分析 PDF 文档中的隐私信息 """
        results = []
        
        # 定义隐私信息匹配规则
        patterns = {
            "姓名": r"[\u4e00-\u9fa5]{2,4}",
            "身份证": r"\b\d{18}|\d{17}X\b",
            "手机号": r"\b1[3-9]\d{9}\b",
            "邮箱": r"[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+",
            "公司": r"[\u4e00-\u9fa5]+公司"
        }

        with pdfplumber.open(pdf_path) as pdf:
            for page_num, page in enumerate(pdf.pages, start=1):
                text = page.extract_text()
                if not text:
                    continue

                lines = text.split("\n")
                for line_num, line in enumerate(lines, start=1):
                    for label, pattern in patterns.items():
                        matches = re.findall(pattern, line)
                        for match in matches:
                            results.append(f"第 {page_num} 页,第 {line_num} 行:{label} - {match}")

        # 显示结果
        if results:
            self.memo.SetValue("\n".join(results))
        else:
            self.memo.SetValue("未检测到隐私信息。")

if __name__ == "__main__":
    app = wx.App(False)
    frame = PDFPrivacyChecker()
    app.MainLoop()

功能说明
  1. 用户界面: 使用wxPython创建一个简单的GUI,包括一个按钮用于选择PDF文件和一个多行文本框用于显示检测结果。
  2. 文件选择: 用户点击“选择PDF文件”按钮后,会弹出一个文件对话框让用户选择要分析的PDF文件。
  3. 隐私信息检测: 使用pdfplumber库读取PDF内容,并利用正则表达式匹配预定义的隐私信息模式。支持的隐私信息包括姓名、身份证号、手机号、邮箱和公司名称。
  4. 结果显示: 如果在PDF中检测到隐私信息,会在文本框中显示每条信息的详细位置(页码和行号)。如果没有检测到任何信息,则显示“未检测到隐私信息”。

运行结果

在这里插入图片描述


http://www.niftyadmin.cn/n/5861611.html

相关文章

Hopper架构 GEMM教程

一 使用 1.1 makefile compile:nvcc -arch=sm_90a -lcuda -lcublas -std=c++17 matmul_h100_optimal.cu -o testrun:./test加入-lcublas,不然会有函数无法被识别 二 代码分析 2.1 kernel外参数分析 2.1.1 基本参数 constexpr int BM = 64*2;constexpr int BN = 256;cons…

React fiber架构中 优先级是如何确定的?

React fiber架构中 优先级是如何确定的? 在React Fiber架构中,优先级的确定是一个复杂而精细的过程,它涉及多种因素和策略。以下是对React Fiber中优先级确定方式的详细分析: 一、优先级类型与划分 React Fiber为不同的任务分配了不同的优…

使用(xshell+xftp)将前端项目部署到服务器

一.以vue项目为例 将项目打包生成dist文件 二.下载载安装xshell和xftp 下载地址:家庭/学校免费 - NetSarang Website 三.连接服务器 在xshell新建会话(需要用到服务器、用户名、密码、端口号)正确输入后连接到服务器 使用命令连接&#x…

angular中使用animation.css实现翻转展示卡片正反两面效果

html <div(click)"flip()"class"animate__animated cursor--pointer"[ngClass]"{ animate__flipInX: isFlipped }" ><div *ngIf"!isFlipped">正面</div><div *ngIf"isFlipped">背面</div> …

店铺矩阵崩塌前夜:跨境多账号运营的3个生死线

多账号运营的3条生死线&#xff0c;跨境卫士助你避开矩阵崩塌危机&#xff01; 在跨境电商行业&#xff0c;多账号运营是许多卖家扩大规模、分散风险的常用策略。然而&#xff0c;随着平台风控的日益严格&#xff0c;多账号运营的风险也在不断加剧。近期&#xff0c;某知名卖家…

Apifox 增强 AI 接口调试功能:自动合并 SSE 响应、展示DeepSeek思考过程

在API调试的世界里&#xff0c;效率和准确性往往决定了开发者的成败。你是否曾为处理SSE&#xff08;Server-Sent Events&#xff09;响应而烦恼&#xff1f;又是否期待在调试时能直观看到AI的“思考过程”&#xff1f;Apifox这次全新升级&#xff0c;将AI接口调试功能推向新高…

人工智能丨OCR 的业务场景,实现原理和测试指标

OCR 的业务场景 OCR&#xff08;光学字符识别&#xff09;技术广泛应用于多个领域&#xff0c;主要业务场景包括&#xff1a; 金融行业&#xff1a; 票据识别&#xff1a;自动识别发票、支票、收据等。身份验证&#xff1a;识别身份证、护照、驾驶证等证件信息。 医疗行业&am…

从硬件工程师视角解析宇树机器人:四足机器人的核心设计与技术挑战

——以Unitree Go1为例&#xff0c;探索四足机器人硬件设计的奥秘 近年来&#xff0c;四足机器人凭借其灵活的运动能力和广泛的场景适应性&#xff0c;成为机器人领域的热门方向。国内企业宇树科技&#xff08;Unitree Robotics&#xff09;凭借Unitree Go1、B1等产品迅速崛起…