集团海量档案整理实战:从乱到序的自动化技术方案
技术方案概述与依赖安装
针对集团档案整理中常见的文件命名混乱、格式不统一、内容难以检索的问题,本方案采用Python结合OCR技术,构建一套自动化识别、分类和重命名的处理流水线。该方案无需复杂的后台服务,本地即可运行,支持对PDF、图片等扫描件进行文字提取并依据内容规则归档。
在开始编写代码前,必须先配置好基础运行环境。本方案依赖Python 3.8及以上版本,以及Tesseract-OCR引擎用于文字识别。
1. 安装Python依赖库
打开命令行终端,直接执行以下命令安装所需的Python库。这些库分别用于OCR调用、PDF处理、图像处理及配置文件解析。
```bash pip install pytesseract Pillow pdf2image PyYAML requests ```2. 安装Tesseract-OCR引擎
Python库只是接口,核心识别能力依赖Tesseract引擎。请根据操作系统下载对应的安装包。
Windows用户:访问 https://github.com/UB-Mannheim/tesseract/wiki 下载最新的tesseract-ocr-w64-setup.exe。安装时务必勾选“Additional language data”,并下载Chinese (Simplified)语言包,否则无法识别中文。假设默认安装路径为 C:\Program Files\Tesseract-OCR。
Linux用户:执行 sudo apt-get install tesseract-ocr tesseract-ocr-chi-sim poppler-utils。
注意:处理PDF文件还需要安装Poppler。Windows用户下载地址:https://github.com/oschwartz10612/poppler-windows/releases/,解压后将bin目录路径配置到系统环境变量Path中。
项目目录与配置文件设计
为了保证代码的通用性和可维护性,我们将识别规则与代码逻辑分离。请在本地创建一个名为 archive_tool 的文件夹,并在其中创建以下目录结构:
1. 编写配置文件 config.yaml

创建 config.yaml 文件,并复制以下完整内容。此配置定义了如何根据识别到的关键词将文件归类,以及提取哪些信息作为新文件名。
OCR识别核心模块开发
创建 sorter.py 文件。首先编写OCR识别的辅助函数。这部分代码负责将不同格式的文件(图片或PDF)转换为文本。
档案自动分类与重命名逻辑
接下来编写核心的业务逻辑函数。该函数读取配置文件中的规则,对OCR提取的文本进行匹配,决定文件的最终去向和新名称。
```python def classify_and_rename(text, filename, config): """ 根据识别文本和配置规则,确定目标文件夹和新文件名 """ 按照优先级排序规则 sorted_rules = sorted(config['rules'], key=lambda x: x['priority']) matched_rule = None extracted_name = None 遍历规则进行匹配 for rule in sorted_rules: 检查关键词是否存在于文本中 hit_count = 0 for keyword in rule['keywords']: if keyword in text: hit_count += 1 只要命中一个关键词即认为匹配该分类(可根据需求改为全部命中) if hit_count > 0: matched_rule = rule logger.info(f"文件 {filename} 匹配规则: {rule['name']}") break if not matched_rule: logger.warning(f"文件 {filename} 未匹配到具体规则,归入默认文件夹") target_folder = config['default_folder'] new_filename = filename 保持原名 else: target_folder = matched_rule['target_folder'] 尝试提取新文件名 pattern = matched_rule.get('filename_pattern') if pattern: match = re.search(pattern, text) if match: 获取正则第一个分组的内容 suffix = match.group(1).strip() 去除文件名中的非法字符 suffix = re.sub(r'[\\/?:"<>|]', "", suffix) 获取原文件扩展名 ext = os.path.splitext(filename)[1] new_filename = f"{matched_rule['name']}_{suffix}{ext}" else: logger.warning(f"匹配到规则但未提取到文件名模式,使用原名") new_filename = filename else: new_filename = filename return target_folder, new_filename def process_file(file_path, config): """处理单个文件的主流程""" filename = os.path.basename(file_path) logger.info(f"正在处理: {filename}") 1. 提取文本 text = "" ext = os.path.splitext(filename)[1].lower() if ext in ['.jpg', '.jpeg', '.png', '.bmp']: text = ocr_image(file_path) elif ext == '.pdf': text = ocr_pdf(file_path) else: logger.info(f"不支持的文件格式 {ext},跳过") return if not text.strip(): logger.warning(f"未识别到文字内容,跳过处理: {filename}") return 2. 分类与重命名 target_folder, new_filename = classify_and_rename(text, filename, config) 3. 移动文件 target_dir = os.path.join(config['output_dir'], target_folder) if not os.path.exists(target_dir): os.makedirs(target_dir) dest_path = os.path.join(target_dir, new_filename) 处理重名问题 if os.path.exists(dest_path): base, ext = os.path.splitext(new_filename) counter = 1 while os.path.exists(os.path.join(target_dir, f"{base}_{counter}{ext}")): counter += 1 new_filename = f"{base}_{counter}{ext}" dest_path = os.path.join(target_dir, new_filename) shutil.move(file_path, dest_path) logger.info(f"文件已移动至: {dest_path}") ```完整代码整合与执行
编写主函数入口,遍历source文件夹下的所有文件并调用上述逻辑。将以下代码追加到 sorter.py 文件末尾。
运行操作指南
1. 准备数据:将所有待整理的杂乱档案文件(PDF或图片)复制到 source 文件夹中。
2. 调整配置:打开 config.yaml,检查 tesseract_cmd 路径是否与实际安装路径一致。如果需要识别特定类型的档案,修改 rules 下的关键词和正则表达式。
3. 执行脚本:在终端中进入项目目录,运行:
```bash python sorter.py ```脚本运行后,控制台会显示每个文件的识别过程、匹配的规则以及最终的移动路径。处理完成后,打开 output 文件夹,即可看到已经按照规则自动分类并重命名好的档案。