平顶山档案培训实操:零基础搭建电子档案检索系统

一、环境准备与依赖安装

在开始构建电子档案检索系统之前,必须先配置好基础的运行环境。本系统基于Python开发,利用Flask作为Web框架,结合Tesseract OCR实现档案内容的文字识别,确保扫描件也能被检索。

1. 安装Python环境

请确保你的系统已安装Python 3.9或更高版本。打开终端或命令提示符,输入以下命令检查版本:

```bash python --version ```

如果未安装,请直接访问Python官网下载对应操作系统的安装包:https://www.python.org/downloads/。安装时务必勾选“Add Python to PATH”选项。

2. 安装Tesseract OCR引擎

档案检索的核心在于图片转文字。需要安装Tesseract引擎。

  • Windows用户: 访问 https://github.com/UB-Mannheim/tesseract/wiki 下载最新的安装包(如tesseract-ocr-w64-setup-5.3.0.exe)。安装时请务必记住安装路径,默认为 C:\Program Files\Tesseract-OCR
  • Linux用户: 执行命令 sudo apt install tesseract-ocrsudo apt install libtesseract-dev
  • macOS用户: 执行命令 brew install tesseract

3. 安装Poppler依赖

处理PDF文件需要Poppler库。

  • Windows用户: 下载 https://github.com/oschwartz10612/poppler-windows/releases/,解压后将 bin 目录添加到系统环境变量Path中,或者记住该路径。
  • Linux用户: 执行 sudo apt install poppler-utils

4. 安装Python依赖库

在项目目录下创建一个 requirements.txt 文件,并填入以下内容:

```text flask==3.0.0 flask-sqlalchemy==3.1.1 pillow==10.1.0 pytesseract==0.3.10 pdf2image==1.16.3 werkzeug==3.0.1 ```

然后在终端执行安装命令:

```bash pip install -r requirements.txt ```

二、项目目录结构搭建

为了保持代码清晰,请在本地创建一个名为 archive_system 的文件夹,并按照以下结构创建子文件夹和文件:

```text archive_system/ │ ├── app.py 主程序入口 ├── config.py 配置文件 ├── models.py 数据库模型 ├── templates/ HTML模板目录 │ ├── index.html 首页(上传与检索) │ └── result.html 检索结果页 ├── uploads/ 上传文件存储目录 └── archive.db SQLite数据库文件(自动生成) ```

注意:请务必手动创建 templatesuploads 文件夹。

三、核心代码编写

1. 配置文件 (config.py)

此文件用于管理数据库路径和上传文件夹设置。请填入以下代码:

```python import os 基于当前文件路径获取项目根目录 basedir = os.path.abspath(os.path.dirname(__file__)) class Config: 设置SQLite数据库URI SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'archive.db') SQLALCHEMY_TRACK_MODIFICATIONS = False 文件上传配置 UPLOAD_FOLDER = os.path.join(basedir, 'uploads') ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'pdf', 'gif'} Tesseract OCR 路径配置 (Windows用户请修改为你的实际安装路径) 如果是Linux或Mac,通常不需要设置此变量,但如果报错请设置 TESSERACT_PATH = r'C:\Program Files\Tesseract-OCR\tesseract.exe' Poppler 路径配置 (Windows用户需要设置,指向bin目录下的poppler.exe所在目录) 例如: r'C:\Program Files\poppler-23.08.0\Library\bin' POPPLER_PATH = r'C:\Program Files\poppler-24.02.0\Library\bin' ```

2. 数据库模型 (models.py)

定义档案的数据结构,包括文件名、存储路径和识别出的文本内容。

```python from flask_sqlalchemy import SQLAlchemy from datetime import datetime db = SQLAlchemy() class Archive(db.Model): id = db.Column(db.Integer, primary_key=True) filename = db.Column(db.String(100), nullable=False) filepath = db.Column(db.String(200), nullable=False) content = db.Column(db.Text, nullable=True) 存储OCR识别后的文本 upload_date = db.Column(db.DateTime, default=datetime.utcnow) def __repr__(self): return f'' ```

3. 主程序逻辑 (app.py)

这是系统的核心,包含文件上传、OCR识别、入库和检索逻辑。

```python import os import pytesseract from flask import Flask, render_template, request, redirect, url_for, flash from werkzeug.utils import secure_filename from pdf2image import convert_from_path from config import Config from models import db, Archive app = Flask(__name__) app.config.from_object(Config) 初始化数据库 db.init_app(app) 配置OCR路径 (仅Windows需要,Linux/Mac可注释掉) if os.name == 'nt': pytesseract.pytesseract.tesseract_cmd = app.config['TESSERACT_PATH'] 设置poppler路径环境变量,防止pdf2image找不到 os.environ['PATH'] += os.pathsep + app.config['POPPLER_PATH'] 创建数据库表 with app.app_context(): db.create_all() def allowed_file(filename): return '.' in filename and \ filename.rsplit('.', 1)[1].lower() in app.config['ALLOWED_EXTENSIONS'] def perform_ocr(filepath): """执行OCR识别,支持图片和PDF""" text_content = "" try: if filepath.lower().endswith('.pdf'): 将PDF转换为图片列表 images = convert_from_path(filepath) for img in images: 识别每一页 text_content += pytesseract.image_to_string(img, lang='chi_sim+eng') + "\n" else: 直接识别图片 text_content = pytesseract.image_to_string(filepath, lang='chi_sim+eng') except Exception as e: print(f"OCR Error: {e}") return "OCR识别失败" return text_content @app.route('/', methods=['GET', 'POST']) def index(): if request.method == 'POST': 处理文件上传 if 'file' not in request.files: flash('没有文件部分') return redirect(request.url) file = request.files['file'] if file.filename == '': flash('未选择文件') return redirect(request.url) if file and allowed_file(file.filename): filename = secure_filename(file.filename) filepath = os.path.join(app.config['UPLOAD_FOLDER'], filename) file.save(filepath) 执行OCR flash('正在处理文件,请稍候...') content = perform_ocr(filepath) 存入数据库 new_archive = Archive(filename=filename, filepath=filepath, content=content) db.session.add(new_archive) db.session.commit() flash(f'文件 {filename} 上传并归档成功!') return redirect(url_for('index')) 处理搜索查询 query = request.args.get('q') results = [] if query: 使用like进行模糊查询 results = Archive.query.filter(Archive.content.contains(query)).all() return render_template('index.html', results=results, query=query) if __name__ == '__main__': app.run(debug=True, port=5000) ```

四、前端页面制作

1. 首页模板 (templates/index.html)

平顶山档案培训实操:零基础搭建电子档案检索系统

这个页面集成了上传表单和搜索结果展示。

```html 平顶山档案培训实操系统 电子档案管理与检索系统 {% with messages = get_flashed_messages() %} {% if messages %}
{% for message in messages %}

{{ message }}

{% endfor %}
{% endif %} {% endwith %}

档案数字化上传

档案内容检索

{% if query %}

搜索结果 (关键词: {{ query }})

{% if results %} {% for item in results %}

{{ item.filename }}

上传时间: {{ item.upload_date.strftime('%Y-%m-%d %H:%M') }}

摘要内容: {{ item.content[:200] }}...

查看/下载文件
{% endfor %} {% else %}

未找到包含 "{{ query }}" 的档案。

{% endif %} {% endif %} ```

五、系统运行与实操测试

1. 启动服务

在终端中确保位于 archive_system 目录下,执行以下命令启动Web服务:

```bash python app.py ```

看到输出 Running on http://127.0.0.1:5000 即表示启动成功。

2. 实操上传测试

  1. 打开浏览器访问 http://127.0.0.1:5000
  2. 准备一张包含文字的图片(如照片或扫描件)或一份PDF文档。建议使用包含“平顶山”或“档案”字样的测试文件。
  3. 在“档案数字化上传”区域点击“选择文件”,选中测试文件。
  4. 点击“上传并OCR识别”按钮。
  5. 观察现象: 页面会刷新,如果配置正确,顶部会显示“文件xxx上传并归档成功”。如果是PDF,处理时间可能会稍长,请耐心等待。

3. 实操检索测试

  1. 在页面下方的“档案内容检索”输入框中,输入你刚才上传文件中包含的某个词汇,例如“平顶山”。
  2. 点击“搜索”按钮。
  3. 观察结果: 页面下方应列出对应的档案条目,显示文件名、摘要以及“查看/下载文件”的链接。
  4. 点击“查看/下载文件”链接,确认能正确打开原始文件。

六、常见故障排查

在实操过程中,可能会遇到以下技术问题,请按方案排查:

  • 报错:tesseract is not installed or it's not in your path

    这是最常见的错误。请检查 config.py 中的 TESSERACT_PATH 是否绝对正确指向了 tesseract.exe。注意路径字符串前的 r 不能省略。

  • 报错:Unable to open file "..." or access it

    通常是PDF转换失败。请检查 config.py 中的 POPPLER_PATH 是否正确指向了Poppler的 bin 目录。如果路径无误,尝试重启终端或IDE。

  • 上传后没有内容或乱码

    默认OCR语言设置为 chi_sim+eng(简体中文+英文)。如果识别效果差,可能是图片分辨率过低。请确保测试图片清晰度足够。

  • 点击下载链接404错误

    检查 index.html 中的链接路径生成逻辑。如果是在本地运行,确保 uploads 文件夹确实存在且有文件权限。

AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

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

微信扫码关注安答联动

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

安答联动档案管理系统