黄石档案整理技术方案:零基础实现批量OCR与归档
一、环境准备与工具安装
在进行黄石档案整理的数字化操作前,必须先搭建好Python运行环境以及OCR识别引擎。请严格按照以下步骤操作,确保环境一致,避免后续运行报错。
1. 安装Python环境
访问Python官网下载Windows安装包。推荐使用Python 3.9或3.10版本,稳定性较高。
下载地址:https://www.python.org/downloads/
下载完成后运行安装程序,务必勾选底部的 "Add Python to PATH" 选项,这是为了能在命令行直接使用Python命令。安装选项选择 "Install Now" 即可。
2. 安装Tesseract-OCR引擎
Tesseract是OCR识别的核心引擎,Python库只是调用接口。我们需要安装Windows版本的Tesseract并配置中文语言包,否则无法识别档案中的汉字。
下载地址:https://github.com/UB-Mannheim/tesseract/wiki
进入页面后,找到 tesseract-ocr-w64-setup-5.x.x.exe(64位版本)进行下载。安装过程中,在 "Choose Components" 界面,务必展开 "Languages" 项,勾选 Chinese (Simplified) 和 Chinese (Traditional),以及默认的 English。这一步至关重要,否则识别中文全乱码。
假设安装路径保持默认:C:\Program Files\Tesseract-OCR。
3. 安装Python依赖库
打开Windows命令提示符(CMD),输入以下命令安装所需的第三方库。这些库分别用于文件操作、图像处理和OCR调用。
```bash pip install pytesseract pillow pandas ```- pytesseract:Python的Tesseract封装包。
- pillow:用于处理图片格式转换和预处理。
- pandas:用于生成档案整理后的Excel清单。
二、建立标准化目录结构
为了实现自动化归档,需要在本地D盘或E盘建立一个专门的项目文件夹。请按照以下结构手动创建文件夹,这直接关系到脚本的运行。
假设我们在E盘建立项目,目录结构如下:
- E:/huangshi_archives/ (项目根目录)
- raw_scans/ (存放待处理的原始扫描件,支持jpg, png, pdf)
- processed_data/ (存放处理后的档案,脚本会自动在此按年份分类)
- output_logs/ (存放运行日志和最终的Excel清单)
操作注意:将所有待整理的黄石档案扫描件图片全部复制到 raw_scans 文件夹中。
三、核心代码实现与配置
在项目根目录 E:/huangshi_archives/ 下,新建一个文本文件,将其重命名为 archive_auto.py。右键选择 "Edit with IDLE" 或使用 Notepad++ 打开,粘贴以下完整代码。
这段代码实现了自动读取图片、OCR识别文字、提取年份和关键词、重命名文件并移动到对应年份文件夹的功能。
```python import os import shutil import pytesseract from PIL import Image import pandas as pd import re from datetime import datetime - 配置区域 - Tesseract安装路径,请根据实际安装位置修改,如果是默认安装则无需更改 tesseract_path = r'C:\Program Files\Tesseract-OCR\tesseract.exe' pytesseract.pytesseract.tesseract_cmd = tesseract_path 项目根目录 BASE_DIR = r'E:\huangshi_archives' RAW_DIR = os.path.join(BASE_DIR, 'raw_scans') PROCESSED_DIR = os.path.join(BASE_DIR, 'processed_data') LOG_DIR = os.path.join(BASE_DIR, 'output_logs') 确保输出目录存在 os.makedirs(PROCESSED_DIR, exist_ok=True) os.makedirs(LOG_DIR, exist_ok=True) - 功能函数 - def extract_metadata_from_text(text): """ 从OCR识别的文本中提取年份和关键词 这里使用正则表达式模拟档案编号和日期的提取规则 """ 提取年份(匹配19xx或20xx) year_match = re.search(r'(19|20)\d{2}', text) year = year_match.group(0) if year_match else '未知年份' 提取类似“黄石档案”、“编号”等关键词后的内容,作为文件名一部分 这里简单提取前10个字符作为摘要,实际可根据档案格式调整正则 clean_text = re.sub(r'\s+', '', text) 去除空白 summary = clean_text[:10] if len(clean_text) >= 10 else clean_text return year, summary def process_image(file_path): """ 处理单张图片:OCR识别 -> 提取信息 -> 移动重命名 """ try: 打开图片 img = Image.open(file_path) 进行OCR识别,lang='chi_sim'指定简体中文 text = pytesseract.image_to_string(img, lang='chi_sim+eng') 提取元数据 year, summary = extract_metadata_from_text(text) 构建新文件名:年份_摘要_原文件名 original_filename = os.path.basename(file_path) file_ext = os.path.splitext(original_filename)[1] 防止文件名非法字符 safe_summary = re.sub(r'[\\/?:"<>|]', '', summary) new_filename = f"{year}_{safe_summary}_{original_filename}" 构建目标路径:按年份分类 target_year_dir = os.path.join(PROCESSED_DIR, year) os.makedirs(target_year_dir, exist_ok=True) target_path = os.path.join(target_year_dir, new_filename) 移动文件 shutil.move(file_path, target_path) return { '原文件名': original_filename, '新文件名': new_filename, '识别年份': year, '摘要内容': summary, '状态': '成功', '归档路径': target_path } except Exception as e: return { '原文件名': os.path.basename(file_path), '新文件名': '', '识别年份': '', '摘要内容': '', '状态': f'失败: {str(e)}', '归档路径': '' } def main(): print(f" 开始执行黄石档案整理任务:{datetime.now()} ") 获取待处理文件列表 files = [f for f in os.listdir(RAW_DIR) if f.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp'))] if not files: print("未在 raw_scans 目录下找到图片文件。") return process_results = [] for index, filename in enumerate(files): file_path = os.path.join(RAW_DIR, filename) print(f"正在处理 ({index+1}/{len(files)}): {filename} ...") result = process_image(file_path) process_results.append(result) 保存结果到Excel df = pd.DataFrame(process_results) timestamp = datetime.now().strftime('%Y%m%d_%H%M%S') excel_path = os.path.join(LOG_DIR, f'档案整理报告_{timestamp}.xlsx') df.to_excel(excel_path, index=False) print(f" 任务完成。报告已生成:{excel_path} ") if __name__ == "__main__": main() ```四、代码关键细节解析

为了确保代码能准确处理黄石档案的特殊格式,以下配置细节需要特别关注,请根据实际档案特征进行微调。
1. OCR语言配置
在代码中 pytesseract.image_to_string(img, lang='chi_sim+eng') 这一行,我们指定了 chi_sim(简体中文)和 eng(英文)。如果档案中包含繁体字,需要将此处修改为 lang='chi_sim+chi_tra+eng',这能显著提升识别准确率。
2. 年份提取逻辑
代码使用了正则表达式 r'(19|20)\d{2}' 来提取年份。这意味着它会自动查找文中出现的 19xx 或 20xx 的数字。如果您的档案年份格式比较特殊(例如“二零二三年”),需要修改 extract_metadata_from_text 函数中的正则逻辑,或者增加中文数字转阿拉伯数字的映射函数。
3. 文件名清洗
档案识别出的文本中往往包含换行符或特殊符号,直接用作文件名会导致报错。代码中使用了 re.sub(r'[\\/?:"<>|]', '', summary) 来剔除Windows文件系统不允许的字符。请勿删除此行代码,否则程序在处理某些特殊档案时会崩溃。
五、执行与验证
环境配置和代码准备完毕后,按照以下步骤执行自动化整理。
1. 运行脚本
打开 CMD,切换到项目目录:
```bash E: cd E:\huangshi_archives ```执行Python脚本:
```bash python archive_auto.py ```2. 观察控制台输出
屏幕上会逐行打印处理进度,例如:
正在处理 (1/50): IMG_001.jpg ...
正在处理 (2/50): IMG_002.jpg ...
如果出现 "Failed" 提示,通常是因为图片分辨率过低或 Tesseract 路径配置错误。
3. 检查归档结果
任务完成后,进行以下三步检查:
- 查看分类文件夹:进入 processed_data 目录,检查是否已经自动生成了类似 "2020"、"2021" 的子文件夹。
- 检查文件重命名:打开子文件夹,确认文件名是否已变为 "年份_摘要_原文件名" 的格式。
- 查看Excel报告:打开 output_logs 目录下生成的最新 Excel 文件,核对每一行数据的“状态”列是否均为“成功”。如果有失败行,查看“状态”列的报错信息,通常是图片格式不支持或文字无法识别。
六、常见问题排查
在实际操作中,可能会遇到以下两个常见问题,请参照对应方案解决。
1. 报错:tesseract is not installed or not in your path
这是因为代码中配置的 Tesseract 路径与实际安装位置不符。请检查代码中的 tesseract_path 变量,确保其指向你电脑上 tesseract.exe 的绝对路径。如果是默认安装,路径应为 C:\Program Files\Tesseract-OCR\tesseract.exe。
2. 识别结果全为乱码
这通常是因为未安装中文语言包,或者图片质量过差。请重新运行 Tesseract 安装包,确保在 "Choose Components" 步骤勾选了 Chinese 相关语言数据。另外,对于扫描件,建议先使用扫描软件进行去噪处理,分辨率至少保持在 300dpi 以上,OCR 效果才会达标。