python开发--文件敏感信息识别

本文介绍了如何使用Python的python-docx库识别Word文档中的敏感信息,包括文本和可能存在的图片。同时提到PDF文件的识别可以借助pdfminer3k或pdfplumber库。
摘要由CSDN通过智能技术生成

0x00 背景

文档中敏感信息识别。不限于word, pdf 等文件格式中的敏感信息及其中的图片敏感信息识别。

0x01 识别原理

以word文档为例

.docx文件有很多种结构,这些结构在python-docx中用3种不同的类型来表示:最高一层是Document对象表示文档,每个Document对象包含一个Paragraph 对象也就是段落组成的列表,而每个Paragraph对象则包含一个Run对象的列表

一个Run对象是具有相同格式的文本,当发生变化的时候就需要一个新的Run对象

个人觉得读取全部文档信息,然后用正则匹配效率比较高。

word 或 pdf 里面有图片的情况,涉及到数字图像处理技术。(图片里的敏感信息)

0x02 实现

用到一个库 python-docx

#!pip install python-docx - -user

import docx
import os

print(os.getcwd())
file = docx.Document("test.docx")
''' # test.docx  #经测试,还得是个docx文档,doc不行
Test数据

匹配数据

Test

Test 敏感信息
'''
print("打印文件行数:" + str(len(file.paragraphs)))
print("打印第1行: " + file.paragraphs[0].text)
print("打印第1行长度: " + str(len(file.paragraphs[0].runs)))
print("打印第3行长度: " + str(len(file.paragraphs[2].runs)))
print("打印第5行长度: " + str(len(file.paragraphs[4].runs)))
print("打印第7行长度: " + str(len(file.paragraphs[6].runs)))  # 空格注意

for i in range(2):
    print(file.paragraphs[0].runs[i].text)  # 只有len 2

print("----------")

for i in range(3):
    print(file.paragraphs[6].runs[i].text)  # 只有len 3/4

print("----------")


# 看样子是根据大小写等样式来区分段落的

def getText(fileName):
    doc = docx.Document(fileName)
    TextList = []
    for paragraph in doc.paragraphs:
        TextList.append(paragraph.text)

    return '\n'.join(TextList)


fileName = r'test.docx'
print(getText(fileName))

test.docx 内容如下:

Test数据

匹配数据

Test

Test 敏感信息

我在不同的电脑打印每一行长度有些不同,不清楚是否跟word版本以及word

版本内置的字体有关。而且只支持docx,暂不支持doc。

打印结果如下:

打印文件行数:7
打印第1行: Test 数据
打印第1行长度: 2
打印第3行长度: 1
打印第5行长度: 1
打印第7行长度: 3
Test 
数据
----------
T
est 
敏感信息
----------
Test数据

匹配数据

Test

Test 敏感信息

而在专业版word上执行结果是 :

打印第1行长度: 2
打印第3行长度: 1
打印第5行长度: 2
打印第7行长度: 4

细节问题暂没时间深究,猜测和系统默认字体有关,理由是在pycharm打开docx文档默认字体不同,一个是英文字体,一个是等线字体。

0x03 reference

【数据安全】一文读懂数据内容识别核心技术 – 绿盟科技技术博客

了解基于确切数据匹配的敏感信息类型 | Microsoft Learn   -- 微软EDM敏感信息识别

python使用docx模块读写docx文件的方法与docx模块常用方法_docx.document_癫疯时刻的博客-CSDN博客

用Python读写Word文档入门-腾讯云开发者社区-腾讯云

python解析并读取PDF文件:函数总结_pypdf读取章节内容_满腹的小不甘的博客-CSDN博客

0x04 后记

python 识别pdf 中敏感信息见 reference 里的链接。python 识别pdf 推荐 pdfminer3k 或 pdfplumber 两个库。

由于时间关系本文写的略简洁,,敏感图片识别也没有介绍到,后续如果有时间会继续修改完善本文。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值