清远档案整理:Python自动化批量重命名与归档实操指南

一、环境准备与依赖安装

在开始清远档案的数字化整理之前,我们需要构建一个基于Python的自动化处理环境。本方案通过OCR技术识别扫描件中的文字信息,并结合正则表达式提取档案的核心元数据(如年份、文号、发文单位),实现自动重命名和归档。

请确保你的操作系统已安装 Python 3.8 或更高版本。打开终端或命令提示符,依次执行以下命令安装核心依赖库:

pip install pytesseract pillow pandas openpyxl

本方案的核心依赖 Tesseract-OCR 需要单独安装可执行文件。这是目前开源领域最强大的OCR引擎之一。

  • Windows用户下载地址: https://github.com/UB-Mannheim/tesseract/wiki 下载最新的 tesseract-ocr-w64-setup-5.x.x.exe
  • Linux用户安装命令: sudo apt-get install tesseract-ocr tesseract-ocr-chi-sim

安装完成后,必须将 Tesseract 的安装路径(例如 C:\Program Files\Tesseract-OCR)添加到系统的环境变量 Path 中,否则程序无法调用识别引擎。为了支持中文档案识别,请确保下载了 chi_sim(简体中文)语言包。

二、项目目录结构设计

为了实现零门槛落地,我们采用标准化的目录结构。请在你的电脑 D 盘根目录下创建以下文件夹结构:

  • D:\qingyuan_archives_project\ (项目根目录)
    • input\ (存放待整理的原始扫描件或图片,支持 jpg, png, pdf)
    • output\ (存放整理后的标准化文件)
    • log\ (存放处理日志和Excel索引表)
    • archive_sort.py (主程序脚本)

将所有需要整理的清远档案扫描件复制到 input 文件夹中。程序将自动读取该文件夹下的所有文件。

三、核心代码实现:OCR识别与元数据提取

新建文件 archive_sort.py,我们将编写完整的自动化逻辑。该脚本包含图像预处理、OCR识别、正则提取和文件归档四个模块。

以下代码可直接复制使用,无需修改即可运行。请确保代码中的 tesseract_cmd 路径与你实际的安装位置一致。

```python
import os
import shutil
import re
import pandas as pd
from PIL import Image
import pytesseract
from datetime import datetime
- 配置区域 -
Windows用户必须修改此处为你的tesseract.exe实际路径
Linux用户通常不需要配置此行,但若报错可尝试指向/usr/bin/tesseract
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
定义路径
INPUT_DIR = 'input'
OUTPUT_DIR = 'output'
LOG_DIR = 'log'
确保输出目录存在
os.makedirs(OUTPUT_DIR, exist_ok=True)
os.makedirs(LOG_DIR, exist_ok=True)
- 核心功能函数 -
def get_image_text(image_path):
"""
使用Tesseract识别图片中的中文文字
"""
try:
打开图片并进行简单的灰度处理以提高识别率
img = Image.open(image_path)
img = img.convert('L')
使用简体中文语言包进行识别
text = pytesseract.image_to_string(img, lang='chi_sim')
return text
except Exception as e:
print(f"OCR识别失败: {image_path}, 错误: {e}")
return ""
def extract_metadata(text):
"""
根据清远档案常见格式提取元数据
"""
默认值
year = "未知年份"
department = "未知单位"
doc_code = "无文号"
1. 提取年份 (匹配 2023 或 2024 等四位数字)
year_match = re.search(r'20[1-2][0-9]', text)
if year_match:
year = year_match.group()
2. 提取发文单位 (匹配清远市下的常见单位,可根据实际情况扩展)
优先匹配“清远市”开头的单位
dept_match = re.search(r'(清远市.{2,6}局|清远市.{2,6}办公室|清远市人民政府)', text)
if dept_match:
department = dept_match.group(1)
else:
备选匹配:包含“局”、“委”、“办”的词汇
backup_match = re.search(r'(.{2,5}(局|委|办公室))', text)
if backup_match:
department = backup_match.group(1)
3. 提取文号 (匹配类似 [2023] 12号 或 清府办〔2023〕1号)
正则逻辑:查找包含方括号或圆括号年份的编号模式
code_match = re.search(r'\[20[1-2][0-9]\]\s\d+号|〔20[1-2][0-9]〕\d+号', text)
if code_match:
doc_code = code_match.group(0).replace(" ", "")  去除空格
else:
备选:查找“第XX号”
simple_code = re.search(r'第\d+号', text)
if simple_code:
doc_code = simple_code.group(0)
return year, department, doc_code
def sanitize_filename(name):
"""
清除文件名中不允许的字符
"""
return re.sub(r'[\\/?:"<>|]', "", name)
def process_files():
"""
主处理逻辑:遍历文件、识别、重命名、移动
"""
file_list = []
support_ext = ('.jpg', '.jpeg', '.png', '.bmp', '.pdf')
files = [f for f in os.listdir(INPUT_DIR) if f.lower().endswith(support_ext)]
print(f"检测到 {len(files)} 个待处理文件,开始处理...")
for filename in files:
file_path = os.path.join(INPUT_DIR, filename)
获取OCR文本
print(f"正在识别: {filename} ...")
text = get_image_text(file_path)
提取元数据
year, department, doc_code = extract_metadata(text)
构建新文件名:年份_单位_文号_原文件名
这样既保证了规范性,又防止了重名覆盖
clean_dept = sanitize_filename(department)
new_filename = f"{year}_{clean_dept}_{doc_code}_{filename}"
移动文件
dest_path = os.path.join(OUTPUT_DIR, new_filename)
shutil.copy(file_path, dest_path)
记录数据用于生成Excel
file_list.append({
"原文件名": filename,
"识别年份": year,
"识别单位": department,
"识别文号": doc_code,
"新文件名": new_filename,
"处理时间": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
})
return file_list
def generate_excel(data):
"""
生成Excel索引表
"""
if not data:
return
df = pd.DataFrame(data)
excel_path = os.path.join(LOG_DIR, f"archive_index_{datetime.now().strftime('%Y%m%d%H%M%S')}.xlsx")
df.to_excel(excel_path, index=False)
print(f"归档完成!索引表已生成: {excel_path}")
- 程序入口 -
if __name__ == "__main__":
data = process_files()
generate_excel(data)
```

四、代码关键逻辑详解

为了确保大家能理解代码并能根据清远当地的具体档案格式进行微调,以下对核心正则表达式进行详细说明。

1. 发文单位提取逻辑

extract_metadata 函数中,我们使用了正则表达式 r'(清远市.{2,6}局|清远市.{2,6}办公室|清远市人民政府)'

  • 清远市: 锁定地域关键词。
  • .{2,6}: 表示中间可以有2到6个任意字符,用于匹配“发展和改革”、“住房和城乡建设”等长单位名。
  • | (或符号): 只要满足其中一种后缀(局、办公室、政府)即匹配成功。

如果你的档案中包含大量“清城区”或“英德市”的下级单位,请手动修改代码中的这一行正则,加入 |英德市.{2,4}局 即可。

2. 文号提取逻辑

清远档案整理:Python自动化批量重命名与归档实操指南

清远档案的文号格式多样,代码中使用了 r'\[20[1-2][0-9]\]\s\d+号|〔20[1-2][0-9]〕\d+号'

  • \[...\]: 匹配中括号格式,如 [2023]。
  • 〔...〕: 匹配全角双括号格式,常用于公文。
  • \s\d+号: 匹配中间可能存在的空格,以及随后的数字+“号”字。

五、实操运行与结果验证

代码编写完成后,按照以下步骤执行操作:

1. 将待处理的图片放入 input 文件夹。

2. 在命令行终端进入项目目录:

cd D:\qingyuan_archives_project

3. 运行脚本:

python archive_sort.py

4. 观察终端输出。程序会逐行打印“正在识别: xxx.jpg”。如果出现 TesseractNotFoundError,请检查代码顶部的路径配置是否正确。

5. 处理完成后,打开 output 文件夹,你将看到所有文件已被重命名。例如:2023_清远市住建局_〔2023〕12号_scan001.jpg

6. 打开 log 文件夹,查看生成的 Excel 文件。该文件包含了所有文件的识别结果,方便人工快速复核。如果OCR识别有误(例如将“住建局”识别为“住健局”),可以直接在Excel中修改,然后利用Excel公式批量重命名文件,实现“人机协同”的高效整理。

六、常见问题排查

在实际操作中,可能会遇到以下两个主要问题,请参考对应解决方案:

1. 识别率低,全是乱码:

这通常是因为扫描件分辨率过低或倾斜严重。Tesseract对300dpi以上的图片识别效果最好。如果是倾斜图片,建议在代码的 get_image_text 函数中,在 img.convert('L') 之前加入自动旋转校正逻辑,或者手动预处理图片。

2. 提示缺少 chi_sim 语言包:

如果在Linux环境下运行,请确保安装了 tesseract-ocr-chi-sim。在Windows下,请检查 Tesseract-OCR\tessdata 文件夹下是否存在 chi_sim.traineddata 文件。如果没有,请从 GitHub Tesseract Wiki 下载该文件并放入该目录。

AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

扫码咨询
安答联动微信公众号二维码

微信扫码关注安答联动

申请试用
热线电话
申请试用

安答联动档案管理系统