前期环境准备
系统与软件要求
需安装Python 3.9及以上版本,Elasticsearch 7.17.x版本,Tesseract OCR引擎。
依赖库安装
执行以下命令安装核心依赖:
重点注意:Windows用户需手动在代码中指定Tesseract路径,后续会说明配置方式。
核心实操步骤
1. 搭建基础Django档案系统
执行以下命令创建项目与应用:
- 创建项目:
django-admin startproject archive_system
- 进入项目目录:
cd archive_system
- 创建档案应用:
python manage.py startapp archive_app
编辑archive_system/settings.py,替换以下完整配置:
```python
import os
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent.parent
SECRET_KEY = '自行生成安全密钥,示例:django-insecure-xxxxxxxxxxxxxxxx'
DEBUG = True
ALLOWED_HOSTS = ['127.0.0.1', 'localhost']
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'archive_app',
'elasticsearch_dsl',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
ROOT_URLCONF = 'archive_system.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = 'archive_system.wsgi.application'
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
AUTH_PASSWORD_VALIDATORS = [
{'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator'},
{'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator'},
{'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator'},
{'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator'},
]
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_TZ = True
STATIC_URL = 'static/'
ELASTICSEARCH_DSL = {
'default': {
'hosts': 'localhost:9200'
},
}
```
重点:自行替换SECRET_KEY,生成方式可执行python -c "import secrets; print(secrets.token_urlsafe(50))"获取。
执行数据库迁移:python manage.py migrate
2. 实现智能元数据提取
编辑archive_app/utils.py,写入完整元数据提取代码:
```python
import pytesseract
from PIL import Image
import re
import os
from django.conf import settings
Windows用户取消下一行注释,设置Tesseract路径
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
def extract_archive_metadata(image_path):
"""从扫描件/图片中提取档案元数据"""
try:
if not os.path.exists(image_path):
return None
OCR识别文本,使用中文简体包
text = pytesseract.image_to_string(Image.open(image_path), lang='chi_sim')
正则匹配档案编号(可根据实际格式调整)
archive_no_match = re.search(r'编号[::]\s([A-Z0-9-]+)', text)
archive_no = archive_no_match.group(1) if archive_no_match else '未知编号'
正则匹配档案日期(格式:XXXX年XX月XX日)
archive_date_match = re.search(r'日期[::]\s(\d{4}年\d{1,2}月\d{1,2}日)', text)
archive_date = archive_date_match.group(1) if archive_date_match else '未知日期'
提取全文文本
full_text = text.strip()
return {
'archive_no': archive_no,
'archive_date': archive_date,
'full_text': full_text
}
except Exception as e:
print(f"识别错误:{str(e)}")
return None
```

重点:扫描件分辨率需设置为300DPI以上,避免OCR识别错误;正则表达式可根据单位实际档案格式修改。
3. 智能化存储优化(Elasticsearch)
安装Elasticsearch 7.17.10,Linux执行以下命令:
- 下载安装包:
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.10-linux-x86_64.tar.gz
- 解压:
tar -zxvf elasticsearch-7.17.10-linux-x86_64.tar.gz
- 进入目录:
cd elasticsearch-7.17.10
- 启动服务(后台运行):
./bin/elasticsearch -d
在项目根目录新建archive_app/management/commands/create_archive_index.py,写入索引创建代码:
```python
from django.core.management.base import BaseCommand
from elasticsearch_dsl.connections import connections
from elasticsearch_dsl import Document, Text, Keyword, Date
class ArchiveDoc(Document):
archive_no = Keyword()
archive_date = Date()
full_text = Text()
class Index:
name = 'archives'
class Command(BaseCommand):
def handle(self, args, options):
connections.create_connection(hosts=['localhost:9200'])
ArchiveDoc.init()
self.stdout.write(self.style.SUCCESS('档案索引创建成功'))
```
执行索引创建命令:python manage.py create_archive_index
重点:Elasticsearch启动后需等待30秒再执行索引创建,确保服务正常加载。
4. 系统运行与验证
创建后台管理账号:python manage.py createsuperuser,按提示输入用户名和密码。
启动Django服务:python manage.py runserver 0.0.0.0:8000
打开浏览器访问http://localhost:8000/admin,登录后上传300DPI分辨率的JPG扫描件,调用元数据提取接口,验证识别结果是否与纸质档案匹配。
重点:若OCR识别出现大量乱码,需重新检查Tesseract语言包是否安装完整,或扫描件是否存在反光、模糊问题。
运维基础技巧
- 每日执行数据库备份:
sqlite3 db.sqlite3 ".backup db_backup_$(date +%Y%m%d).sqlite3"
- 每月清理Elasticsearch无效索引:
curl -X DELETE "localhost:9200/archives/_query?q="
- OCR识别率低时,可补充安装对应方言/专业术语的Tesseract语言包(如chi_sim_vert)
- 每次更新档案结构后,需执行
python manage.py migrate同步数据库字段