网站首页/ 信息中心/ 档案百科/

济宁档案整理技术落地:基于Python的OCR识别与自动化归档

发布时间:2026年09月18日 13:45:21 浏览量:0

一、环境搭建与依赖安装

在进行济宁档案整理的数字化操作前,必须先配置好Python运行环境及OCR识别引擎。本方案基于Python 3.9环境,利用Tesseract-OCR进行文字识别,实现档案内容的自动提取与归档。

1. 安装Python环境

前往Python官网下载Windows x64可执行安装包。安装时务必勾选"Add Python to PATH"选项,以便在命令行直接调用。下载地址:https://www.python.org/downloads/release/python-3913/

2. 安装Tesseract-OCR引擎

这是识别的核心组件。下载Tesseract for Windows版本,建议安装5.3.0及以上版本以获得更好的中文识别率。下载地址:https://github.com/UB-Mannheim/tesseract/wiki

安装过程中,在"Choose Components"界面务必勾选Chinese (Simplified)语言包,否则无法识别中文档案。安装完成后,将安装路径(默认为C:\Program Files\Tesseract-OCR\tesseract.exe)添加至系统环境变量Path中。

3. 安装Python依赖库

打开CMD或PowerShell,执行以下命令安装必要的图像处理与文件操作库:

```bash pip install pytesseract pillow opencv-python ```

二、标准化目录结构设计

为了确保整理后的档案符合济宁地区档案管理规范,我们需要在本地建立一个标准化的目录结构。请手动在D盘根目录下创建以下文件夹结构:

02_已归档档案下,我们将按照“年度-保管期限-问题”的层级自动生成文件夹。例如:2023\永久\文书档案\

三、图像预处理与OCR识别核心代码

原始扫描件往往存在噪点、倾斜或模糊问题,直接识别会导致准确率下降。我们需要编写一个预处理函数,对图像进行灰度化、二值化和去噪处理。

1. 图像预处理逻辑

济宁档案整理技术落地:基于Python的OCR识别与自动化归档

使用OpenCV对图像进行优化。以下是具体的预处理代码实现:

```python import cv2 import numpy as np def preprocess_image(image_path): 读取图像 img = cv2.imread(image_path) 转为灰度图 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 二值化处理,使用OTSU自动寻找阈值 _, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) 去噪处理 denoised = cv2.medianBlur(binary, 5) return denoised ```

2. OCR文字提取配置

配置pytesseract以调用Tesseract引擎,并指定中文语言数据。为了提高档案标题和文号的识别准确率,我们需要设置白名单字符变量(针对数字和常见汉字)。

```python import pytesseract from PIL import Image 指定tesseract.exe的绝对路径,请根据实际安装位置修改 pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' def extract_text_from_image(image_cv): 将OpenCV图像格式转换为PIL格式 pil_img = Image.fromarray(image_cv) 配置识别参数:使用简体中文,识别页码 custom_config = r'--oem 3 --psm 6 -l chi_sim' 执行识别 text = pytesseract.image_to_string(pil_img, config=custom_config) return text ```

四、自动化归档逻辑实现

本模块是核心,负责解析OCR提取的文本,根据济宁档案整理规则提取“年度”、“保管期限”和“文件题名”,并移动文件到对应目录。

1. 档案元数据解析

假设档案标题中包含年份信息,或者OCR能识别出“2023年”字样。我们需要编写正则表达式来提取这些关键信息。

```python import re import os import shutil import datetime def parse_archive_metadata(text): 默认值设置 year = str(datetime.datetime.now().year) retention = "10年" 默认保管期限 title = "未命名文件" 提取年份 (匹配 1990-2099 年) year_match = re.search(r'(19|20)\d{2}', text) if year_match: year = year_match.group(0) 提取保管期限 (匹配永久、30年、10年) if "永久" in text: retention = "永久" elif "30年" in text: retention = "30年" 提取题名 (简单策略:取识别文本的前20个字符作为文件夹名,去除特殊符号) 实际生产中应根据档案页眉特定格式提取 lines = text.split('\n') for line in lines: if len(line) > 5: 过滤掉噪点行 title = re.sub(r'[\\/?:"<>|]', '', line.strip())[:15] 去除文件名非法字符 break return year, retention, title ```

2. 文件移动与目录创建

根据解析出的元数据,在目标目录创建结构并移动文件。

```python def move_file_to_archive(source_path, year, retention, title): base_output = r"D:\JiNang_Archives\02_已归档档案" 构建目标文件夹路径:年度/保管期限/题名 target_dir = os.path.join(base_output, year, retention, title) 如果目录不存在则创建 if not os.path.exists(target_dir): os.makedirs(target_dir) 获取原文件名 filename = os.path.basename(source_path) target_path = os.path.join(target_dir, filename) 移动文件 try: shutil.move(source_path, target_path) print(f"成功: {filename} -> {target_dir}") return True except Exception as e: print(f"失败: {filename}, 错误: {str(e)}") return False ```

五、完整脚本与执行流程

将上述代码片段整合为一个完整的Python脚本archive_organizer.py,并放置在D:\JiNang_Archives目录下。

1. 完整脚本代码

```python import cv2 import numpy as np import pytesseract from PIL import Image import re import os import shutil import datetime 配置区域 INPUT_DIR = r"D:\JiNang_Archives\01_待处理档案" OUTPUT_DIR = r"D:\JiNang_Archives\02_已归档档案" LOG_DIR = r"D:\JiNang_Archives\03_日志记录" TESSERACT_PATH = r'C:\Program Files\Tesseract-OCR\tesseract.exe' 初始化配置 pytesseract.pytesseract.tesseract_cmd = TESSERACT_PATH if not os.path.exists(LOG_DIR): os.makedirs(LOG_DIR) def process_single_file(file_path): try: 1. 预处理 img_processed = preprocess_image(file_path) 2. OCR识别 text_content = extract_text_from_image(img_processed) 3. 解析元数据 year, retention, title = parse_archive_metadata(text_content) 4. 移动文件 status = move_file_to_archive(file_path, year, retention, title) 5. 记录识别文本(用于人工复核) log_name = os.path.basename(file_path) + ".txt" log_path = os.path.join(LOG_DIR, log_name) with open(log_path, 'w', encoding='utf-8') as f: f.write(f"识别路径: {file_path}\n") f.write(f"归档路径: {year}/{retention}/{title}\n") f.write("-" 20 + "\n") f.write(text_content) except Exception as e: print(f"处理文件 {file_path} 发生异常: {e}") def main(): files = [f for f in os.listdir(INPUT_DIR) if f.lower().endswith(('.jpg', '.png', '.jpeg'))] print(f"检测到 {len(files)} 个待处理文件。") for filename in files: full_path = os.path.join(INPUT_DIR, filename) print(f"正在处理: {filename}...") process_single_file(full_path) print("所有文件处理完毕。") if __name__ == "__main__": main() ```

2. 执行步骤

  1. 将所有待整理的扫描件图片放入D:\JiNang_Archives\01_待处理档案文件夹。
  2. 打开命令行工具,切换到项目目录:
    cd D:\JiNang_Archives
  3. 执行脚本:
    python archive_organizer.py

3. 结果验证与修正

脚本执行完毕后,检查02_已归档档案目录。文件将按照“年份\保管期限\题名”的结构自动归档。如果发现OCR识别错误导致归档路径不准确,可查看03_日志记录中的txt文件,人工核对识别内容,并手动修正文件夹名称。对于识别率极低的文件,建议检查扫描件清晰度或重新调整二值化阈值参数。

陶瓷企业档案培训报名,别等出事了才想起来
陶瓷企业档案培训报名,别等出事了才想起来
你是不是也遇到过这种情况?车间里老师傅退休了,他手里那些釉料配方、烧成记录,跟着他一起“退休”了,新来的技术员两眼一抹黑,产品颜色死活调不对。或者,客户要三年前那批出口欧洲的订单数据,你翻遍了办公室和...
2026年09月18日 13:45:21
档案培训考试报名全流程详解:从零开始轻松搞定
档案培训考试报名全流程详解:从零开始轻松搞定
准备参加档案培训考试,却对报名流程一头雾水?别担心,这篇文章就是为你量身打造的“通关秘籍”。我们将用最通俗易懂的语言,手把手带你走完从信息查询到成功报名的每一个环节,帮你避开常见“坑点”,确保报名过程...
2026年09月18日 13:45:21
档案数字化怎么搞?10年老手的私企档案数字化经验全公开
档案数字化怎么搞?10年老手的私企档案数字化经验全公开
你有没有遇过这种情况?老板突然拍给你一堆摞得比人高的实体档案,说这周之内要搞完档案数字化。你对着一堆合同、员工档案、财务凭证抓瞎,找外包报价动辄几万块,还怕把公司机密漏出去,自己上手扫了两天,文件名乱...
2026年09月18日 13:45:21
微信咨询
电话联系
QQ客服
微信咨询一对一服务
服务热线: 028-8744 4417
QQ客服: 2305721818