克孜勒苏柯尔克孜自治州档案整理数字化落地全流程
一、开发环境与核心依赖安装
在开始克孜勒苏柯尔克孜自治州档案整理工作前,需要配置本地Python环境。本文基于Windows 10/11系统编写,使用Python 3.9版本进行自动化脚本开发。需要安装OCR识别引擎Tesseract-OCR,这是处理纸质档案数字化的核心工具。
请直接访问Tesseract-OCR的Windows安装包下载地址:https://github.com/UB-Mannheim/tesseract/wiki。下载tesseract-ocr-w64-setup-5.3.0.20221214.exe版本,安装时务必勾选Chinese (Simplified)和Chinese (Traditional)语言包,安装路径建议保持默认为C:\Program Files\Tesseract-OCR。
打开命令行终端(CMD或PowerShell),执行以下命令安装Python所需的第三方库:
pip install pytesseract pillow pandas openpyxl
安装完成后,创建一个项目文件夹,例如D:\KZLS_Archive_Project,并在其中新建raw_files(存放原始扫描件)、processed_files(存放整理后文件)和output(存放索引表)三个文件夹。
二、档案文件标准化重命名脚本
原始档案通常存在文件名混乱(如IMG_001.jpg)的问题。第一步是根据克孜勒苏柯尔克孜自治州的档案编码规范进行批量重命名。我们将编写脚本,提取文件的创建时间,并将其格式化为地区代码_年份_原序号.扩展名的格式。
在项目根目录下创建rename_files.py,写入以下代码:
import os
import time
from datetime import datetime
配置路径
SOURCE_DIR = r'D:\KZLS_Archive_Project\raw_files'
PREFIX = "KZLS" 克孜勒苏柯尔克孜自治州缩写
def standardize_rename():
files = os.listdir(SOURCE_DIR)
count = 1
for filename in files:
跳过非文件项
if not os.path.isfile(os.path.join(SOURCE_DIR, filename)):
continue
获取文件扩展名
ext = os.path.splitext(filename)[1]
获取文件创建时间并格式化
file_path = os.path.join(SOURCE_DIR, filename)
timestamp = os.path.getctime(file_path)
date_obj = datetime.fromtimestamp(timestamp)
date_str = date_obj.strftime("%Y%m%d")
生成新文件名:KZLS_20231027_001.jpg
new_name = f"{PREFIX}_{date_str}_{str(count).zfill(3)}{ext}"
new_path = os.path.join(SOURCE_DIR, new_name)
重命名操作
try:
os.rename(file_path, new_path)
print(f"重命名成功: {filename} -> {new_name}")
count += 1
except Exception as e:
print(f"重命名失败: {filename}, 错误: {e}")
if __name__ == "__main__":
standardize_rename()
运行该脚本前,请确保raw_files文件夹内只有待处理的图片或PDF文件。脚本会自动根据文件创建日期生成带有地区前缀的标准文件名。
三、图像预处理与OCR文字提取
由于克孜勒苏柯尔克孜自治州的档案可能包含双语(柯尔克孜文、汉文)或手写体,直接OCR识别率较低。我们需要对图像进行灰度化、二值化处理,以提高识别准确率。创建ocr_processor.py:

import pytesseract
from PIL import Image, ImageEnhance, ImageFilter
import os
设置Tesseract路径,请根据实际安装路径修改
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
SOURCE_DIR = r'D:\KZLS_Archive_Project\raw_files'
OUTPUT_DIR = r'D:\KZLS_Archive_Project\processed_files'
def preprocess_image(image_path):
打开图片
img = Image.open(image_path)
转换为灰度图
img = img.convert('L')
增强对比度
enhancer = ImageEnhance.Contrast(img)
img = enhancer.enhance(2.0)
二值化处理,阈值设置为170,可根据实际扫描件清晰度调整
img = img.point(lambda x: 0 if x < 170 else 255, '1')
return img
def extract_text_from_image(filename):
image_path = os.path.join(SOURCE_DIR, filename)
图像预处理
try:
processed_img = preprocess_image(image_path)
except Exception as e:
print(f"图像预处理失败 {filename}: {e}")
return None
配置OCR参数:--psm 6 表示假设为单一文本块,-l chi_sim+eng 表示中英文混合
custom_config = r'--oem 3 --psm 6 -l chi_sim+eng'
识别文字
text = pytesseract.image_to_string(processed_img, config=custom_config)
return text.strip()
if __name__ == "__main__":
测试单张图片
test_file = "KZLS_20231027_001.jpg" 替换为实际存在的文件名
if os.path.exists(os.path.join(SOURCE_DIR, test_file)):
content = extract_text_from_image(test_file)
print(f"识别内容:\n{content}")
else:
print("测试文件不存在,请检查路径。")
关键参数说明:--psm 6适用于对单列文本块进行识别,适合标准公文;如果档案是表格形式,请将参数修改为--psm 4。-l chi_sim+eng指定了简体中文和英文语言包,如果识别柯尔克孜文,需要下载对应的 trained data 并放入 tessdata 文件夹,参数改为-l kir+chi_sim。
四、基于关键词的自动分类归档
档案整理的核心在于分类。我们将根据OCR提取出的关键词,自动将文件移动到对应的文件夹中。例如,包含“财政”、“预算”的文件归入“财政类”,包含“教育”、“学校”的归入“教育类”。
继续完善ocr_processor.py,增加自动分类逻辑:
import shutil
定义分类关键词规则
CATEGORY_RULES = {
"财政财务": ["财政", "预算", "决算", "拨款", "税收"],
"民政社保": ["民政", "低保", "社保", "养老", "救助"],
"教育科技": ["教育", "学校", "科技", "科研", "师资"],
"国土资源": ["土地", "矿产", "规划", "测绘", "房产"],
"公文综合": ["通知", "通报", "请示", "批复", "会议纪要"]
}
def categorize_file(filename, text_content):
detected_category = "其他类"
遍历规则匹配关键词
for category, keywords in CATEGORY_RULES.items():
for keyword in keywords:
if keyword in text_content:
detected_category = category
break
if detected_category != "其他类":
break
return detected_category
def process_all_files():
files = [f for f in os.listdir(SOURCE_DIR) if os.path.isfile(os.path.join(SOURCE_DIR, f))]
for filename in files:
print(f"正在处理: {filename}")
text_content = extract_text_from_image(filename)
if not text_content:
continue
category = categorize_file(filename, text_content)
创建目标分类文件夹
target_folder = os.path.join(OUTPUT_DIR, category)
if not os.path.exists(target_folder):
os.makedirs(target_folder)
移动文件
src_path = os.path.join(SOURCE_DIR, filename)
dst_path = os.path.join(target_folder, filename)
try:
shutil.move(src_path, dst_path)
print(f"文件 {filename} 已归类至: {category}")
except Exception as e:
print(f"移动文件失败: {e}")
将此函数调用放入 main 块中执行
运行process_all_files()函数后,脚本会自动读取raw_files中的所有文件,识别内容,判断分类,并将其移动到processed_files下的对应子目录中。
五、生成Excel检索索引表
最后一步,我们需要生成一个Excel索引表,方便后续查阅。索引表应包含:文件名、所属分类、OCR识别摘要、文件路径。创建generate_index.py:
import pandas as pd
import os
PROCESSED_DIR = r'D:\KZLS_Archive_Project\processed_files'
OUTPUT_EXCEL = r'D:\KZLS_Archive_Project\output\档案索引表.xlsx'
def generate_excel_index():
data = []
遍历所有分类文件夹
for root, dirs, files in os.walk(PROCESSED_DIR):
for filename in files:
file_path = os.path.join(root, filename)
category = os.path.basename(root)
获取文件大小(MB)
file_size = round(os.path.getsize(file_path) / 1024 / 1024, 2)
data.append({
"档案编号": filename,
"所属分类": category,
"文件大小(MB)": file_size,
"存储路径": file_path,
"整理日期": pd.Timestamp.now().strftime("%Y-%m-%d")
})
创建DataFrame
df = pd.DataFrame(data)
按照分类和文件名排序
df = df.sort_values(by=["所属分类", "档案编号"])
导出Excel
try:
df.to_excel(OUTPUT_EXCEL, index=False, engine='openpyxl')
print(f"索引表已生成: {OUTPUT_EXCEL}")
print(f"共整理档案 {len(data)} 份")
except Exception as e:
print(f"生成Excel失败: {e}")
if __name__ == "__main__":
generate_excel_index()
执行此脚本后,会在output文件夹下生成档案索引表.xlsx。打开该表格,你可以看到所有已整理档案的清单。你可以直接在Excel中使用筛选功能快速查找特定类别的档案。
六、全流程一键执行整合
为了方便操作,我们将上述步骤整合为一个主控脚本main.py,实现一键完成从重命名到生成索引的全过程:
import os
import subprocess
def run_step(script_name, step_name):
print(f" 开始执行: {step_name} ")
try:
result = subprocess.run(['python', script_name], capture_output=True, text=True, encoding='utf-8')
print(result.stdout)
if result.stderr:
print("错误信息:", result.stderr)
print(f" 完成: {step_name} \n")
except Exception as e:
print(f"执行 {script_name} 时发生异常: {e}")
if __name__ == "__main__":
确保所有脚本在同一目录下
scripts = [
("rename_files.py", "标准化重命名"),
("ocr_processor.py", "OCR识别与自动归档"),
("generate_index.py", "生成Excel索引")
]
print("克孜勒苏柯尔克孜自治州档案整理系统启动...")
for script, name in scripts:
if os.path.exists(script):
run_step(script, name)
else:
print(f"警告: 未找到脚本文件 {script},跳过该步骤。")
print("所有任务执行完毕。")
将rename_files.py、ocr_processor.py、generate_index.py和main.py放在同一目录下。将待整理的扫描件放入raw_files,直接运行main.py即可实现全自动化档案整理。此方案无需购买昂贵的专业档案软件,利用开源技术即可在本地高效完成克孜勒苏柯尔克孜自治州档案整理的数字化落地。