档案软件AI化实战:基于PaddleOCR的文档识别方案

一、环境搭建与依赖安装

本指南将构建一个基于Python的智能档案处理工具,核心功能包括OCR文字识别、批量处理以及基于NLP的自动关键词提取。所有操作均在本地完成,无需调用外部付费API。

确保你的系统中已经安装了Python 3.8或更高版本。打开终端(Windows下为CMD或PowerShell,Mac/Linux下为Terminal),输入以下命令检查版本:

```bash python --version ```

如果未安装或版本过低,请前往Python官网下载安装包。环境准备就绪后,我们需要创建一个独立的虚拟环境来隔离项目依赖,避免冲突。执行以下命令:

```bash 创建名为archive_ai的虚拟环境 python -m venv archive_ai 激活虚拟环境 Windows: archive_ai\Scripts\activate Mac/Linux: source archive_ai/bin/activate ```

接下来,安装核心依赖库。我们将使用百度开源的PaddleOCR进行文字识别,它对中文支持极佳且免费;使用jieba进行中文分词和关键词提取。请严格按顺序执行以下安装命令:

```bash 安装PaddlePaddle深度学习框架(CPU版本,适合零门槛运行) pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple 安装PaddleOCR模型库 pip install "paddleocr>=2.0.1" 安装图像处理库和中文分词库 pip install pillow jieba ```

二、单张档案图片OCR识别实现

在项目目录下新建一个名为ocr_tool.py的文件。我们将先编写代码实现单张图片的文字提取功能。PaddleOCR的使用非常标准化,初始化模型后,直接传入图片路径即可。

以下是完整的单图识别代码,包含详细的中文注释解释每一行参数的作用:

```python from paddleocr import PaddleOCR import os 初始化OCR模型 use_angle_cls=True: 启用文字方向分类,自动旋转倒置的图片 lang="ch": 指定语种为中文(中英文混合模型) ocr = PaddleOCR(use_angle_cls=True, lang="ch", show_log=False) def process_single_image(image_path): 检查文件是否存在 if not os.path.exists(image_path): print(f"错误:找不到文件 {image_path}") return print(f"正在识别:{image_path} ...") 执行识别 result是一个列表,每个元素代表一个检测到的文本块 result = ocr.ocr(image_path, cls=True) 提取并合并所有识别到的文本 full_text = [] if result and result[0]: for line in result[0]: line的结构: [[坐标], (文本内容, 置信度)] text_content = line[1][0] confidence = line[1][1] 可以根据置信度过滤低质量文字,例如只保留置信度>0.5的 if confidence > 0.5: full_text.append(text_content) 将列表拼接为完整字符串 content_str = "\n".join(full_text) print("-" 30) print("识别结果:") print(content_str) print("-" 30) return content_str 测试代码:请将下方路径替换为你本地的一张图片路径 process_single_image("test.jpg") ```

档案软件AI化实战:基于PaddleOCR的文档识别方案

保存上述代码。为了测试,你需要找一张包含文字的jpg或png图片放在同级目录,命名为test.jpg,取消代码最后一行的注释并运行:

```bash python ocr_tool.py ```

三、批量处理档案与结构化存储

实际档案管理中,文件数量巨大。我们需要遍历文件夹,将所有扫描件识别并保存为JSON格式的元数据,方便后续存入数据库。在ocr_tool.py中追加以下代码:

```python import json import glob from datetime import datetime def batch_process_folder(input_folder, output_json): 支持的图片格式 valid_extensions = ['.jpg', '.png', '.jpeg', '.bmp'] image_files = [] 收集所有图片文件 for ext in valid_extensions: 递归查找文件夹下所有符合后缀的文件 image_files.extend(glob.glob(os.path.join(input_folder, '', ext), recursive=True)) if not image_files: print(f"在文件夹 {input_folder} 中未找到图片文件。") return data_store = [] for img_path in image_files: 调用之前定义的单图识别函数 content = process_single_image(img_path) if content: 构建结构化数据对象 record = { "file_name": os.path.basename(img_path), "file_path": img_path, "scan_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), "raw_content": content, "status": "success" } data_store.append(record) 将结果写入JSON文件 try: with open(output_json, 'w', encoding='utf-8') as f: json.dump(data_store, f, ensure_ascii=False, indent=4) print(f"\n处理完成!数据已保存至 {output_json}") except Exception as e: print(f"保存JSON文件失败: {e}") 测试批量处理 请确保当前目录下有一个名为 'archives' 的文件夹,里面放有图片 batch_process_folder("archives", "archive_data.json") ```

四、引入NLP实现智能标签提取

仅有文字是不够的,档案软件需要自动分类。我们将使用jieba.analyse.extract_tags自动从识别出的文本中提取关键词,作为档案的标签。这属于NLP(自然语言处理)的基础应用。

继续在文件中追加以下函数,用于增强我们的数据结构:

```python import jieba.analyse def add_smart_tags(data_store, top_k=5): jieba默认TF-IDF算法,这里不做额外训练,直接使用通用语料库 对于垂直领域(如医疗、法律),建议加载自定义词典 for record in data_store: text = record.get("raw_content", "") if text: 提取权重最高的top_k个关键词 keywords = jieba.analyse.extract_tags(text, topK=top_k, withWeight=True) 格式化标签列表 tag_list = [item[0] for item in keywords] record["tags"] = tag_list print(f"文件: {record['file_name']} -> 自动标签: {tag_list}") return data_store 修改 batch_process_folder 函数,在保存JSON前调用此函数 ... data_store = add_smart_tags(data_store) ... ```

五、完整整合代码与运行指南

将上述所有片段整合,最终的ocr_tool.py完整结构如下。请直接复制覆盖原文件内容:

```python import os import json import glob from datetime import datetime from paddleocr import PaddleOCR import jieba.analyse 1. 初始化模型 print("正在加载AI模型,首次运行会自动下载模型文件(约几十MB),请稍候...") ocr = PaddleOCR(use_angle_cls=True, lang="ch", show_log=False) def process_single_image(image_path): if not os.path.exists(image_path): return "" try: result = ocr.ocr(image_path, cls=True) full_text = [] if result and result[0]: for line in result[0]: text_content = line[1][0] confidence = line[1][1] if confidence > 0.5: full_text.append(text_content) return "\n".join(full_text) except Exception as e: print(f"识别 {image_path} 出错: {e}") return "" def add_smart_tags(data_store, top_k=5): for record in data_store: text = record.get("raw_content", "") if text: keywords = jieba.analyse.extract_tags(text, topK=top_k) record["tags"] = keywords return data_store def batch_process_folder(input_folder, output_json): valid_extensions = ['.jpg', '.png', '.jpeg', '.bmp'] image_files = [] for ext in valid_extensions: image_files.extend(glob.glob(os.path.join(input_folder, '', ext), recursive=True)) if not image_files: print("未找到图片文件。") return data_store = [] for img_path in image_files: print(f"正在处理: {os.path.basename(img_path)}") content = process_single_image(img_path) if content: record = { "file_name": os.path.basename(img_path), "file_path": img_path, "scan_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), "raw_content": content, "tags": [] 占位 } data_store.append(record) 2. AI标签提取 print("正在进行NLP智能标签提取...") data_store = add_smart_tags(data_store) 3. 保存结果 with open(output_json, 'w', encoding='utf-8') as f: json.dump(data_store, f, ensure_ascii=False, indent=4) print(f"成功!共处理 {len(data_store)} 个文件,结果已保存至 {output_json}") if __name__ == "__main__": === 配置区域 === 在此处修改你的输入文件夹路径和输出文件名 INPUT_DIR = "./archives" OUTPUT_FILE = "./archive_result.json" ============== 如果输入文件夹不存在,自动创建一个用于测试 if not os.path.exists(INPUT_DIR): os.makedirs(INPUT_DIR) print(f"提示:已自动创建输入文件夹 '{INPUT_DIR}',请放入图片后重新运行。") else: batch_process_folder(INPUT_DIR, OUTPUT_FILE) ```

运行步骤

  1. 准备数据:在当前项目目录下创建一个名为archives的文件夹。
  2. 放入档案:将需要识别的档案扫描件(图片格式)复制到archives文件夹中。
  3. 执行程序:在终端运行命令 python ocr_tool.py
  4. 查看结果:程序运行结束后,会在目录下生成archive_result.json。打开该文件,你将看到每张图片的识别文本以及AI自动生成的标签。

常见问题处理

如果在运行过程中遇到ModuleNotFoundError: No module named 'shapely'等错误,这是因为某些依赖库未完全安装。请执行以下命令补全依赖:

```bash pip install shapely scikit-image ```
AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

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

微信扫码关注安答联动

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

安答联动档案管理系统