找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

35

积分

0

好友

3

主题
发表于 2025-10-24 15:32:27 | 查看: 23| 回复: 0
Blacklogo-nobackground.png

开篇

扫描的PDF堆满硬盘却搜不到想要的那份?纸质发票归档后再也找不到?今天拆解一个GitHub 3万+星的开源项目Paperless-ngx,看它如何用Django构建智能文档归档系统。


项目介绍

Paperless-ngx是一个基于Django的自托管文档管理系统,核心功能是通过OCR技术将纸质文档转为可搜索的数字档案。技术栈采用Django后端、Angular前端和PostgreSQL数据库。

documents-smallcards.png


架构设计

三进程分离架构

系统采用生产者-消费者模式,拆分为三个独立进程:

Web Server层

  • 基于Gunicorn和Django提供REST API
  • 处理文档查询和用户请求
  • 启动命令:gunicorn paperless.wsgi

Document Consumer层

  • 监控consume目录的新增文件
  • 将文档处理任务推送到Redis队列
  • 启动命令:python manage.py document_consumer

Task Processor层

  • 使用Django-Q从队列拉取任务
  • 执行OCR识别和智能分类
  • 支持配置多个worker并行处理

数据处理流程

文档上传后,Consumer检测到新文件并推送到Redis队列,Django-Q从队列取出任务进行OCR识别,最后将结构化数据存入PostgreSQL。这种设计让文档上传立即返回,耗时的OCR处理在后台完成。


技术特点

任务队列选型

项目使用Django-Q而非常见的Celery,原因是Django-Q与Django原生集成更好,配置简单,支持定时任务和失败重试,依赖Redis作为消息队列。

OCR引擎支持

系统支持多种文档解析器:

  • Tesseract:开源OCR引擎,支持100多种语言
  • Tika:Apache项目,处理Office文档
  • Gotenberg:PDF转换工具

通过抽象Parser接口,可以灵活切换不同引擎。

智能分类功能

内置自动匹配算法,根据文档内容自动打标签、分配类型和存储路径。系统会基于历史数据学习,使用越久准确率越高。


部署方式

Docker Compose部署

项目提供docker-compose.yml配置文件,包含webserver、redis和postgres三个服务,运行docker-compose up -d即可启动。

裸机部署步骤

需要先安装Redis和PostgreSQL,然后配置paperless.conf文件,分别启动webserver、consumer和qcluster三个进程。


适用场景

这个系统适合企业文档归档场景,比如合同、发票、报告的统一管理;也适合个人知识库建设,将扫描的书籍和笔记数字化;还可以用于财务系统,实现票据OCR识别后自动入账。


架构启示

从这个项目可以看到几个设计思路:

一是职责分离。监控、处理、展示三层解耦,每层可以独立扩展。

二是异步优先。耗时任务放到后台处理,提升用户体验。

三是技术务实。Django-Q比Celery轻量,对于中小规模应用够用就好。

四是开放集成。提供RESTful API支持二次开发。

对于需要构建文档管理系统的团队,这套架构值得参考。


关注我们

《云栈后端架构》专注后端开发与架构设计,每周拆解优质开源项目,分享实战经验。

👉 关注公众号,获取更多技术干货


项目资源

GitHub仓库
https://github.com/paperless-ngx/paperless-ngx

官方文档
https://docs.paperless-ngx.com

1024程序员节课程推荐  

Java就业班 : https://yunpan.plus/t/412-1-1
Python大数据 : https://yunpan.plus/t/417-1-1
爬虫+JS逆向 : https://yunpan.plus/t/419-1-1


标签:#Paperless-ngx #Github #Django #文档管理系统 #OCR技术 #后端架构

您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|云栈社区(YunPan.Plus) ( 苏ICP备2022046150号-2 )

GMT+8, 2025-11-5 21:33 , Processed in 0.075001 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 CloudStack.

快速回复 返回顶部 返回列表