写点什么

Paperless-ngx 文档管理系统

作者:qife
  • 2025-07-01
    福建
  • 本文字数:2059 字

    阅读完需:约 7 分钟

项目标题与描述

Paperless-ngx 是一个文档管理系统,旨在将纸质文档转换为可搜索的电子档案,帮助用户减少纸张使用。它是原始 Paperless 和 Paperless-ng 项目的官方继承者,由团队共同维护和发展。

功能特性

  • 文档管理:将物理文档转换为可搜索的电子档案

  • 自动分类:基于内容自动分配文档类型、标签和对应关系

  • 全文检索:支持文档内容的全文搜索

  • 多种文件格式支持:包括 PDF、PNG、JPG、TIFF 等

  • 加密存储:支持使用 GPG 加密文档

  • 工作流管理:支持自定义文档处理工作流

  • 多用户支持:支持权限管理和多用户协作

  • REST API:提供完整的 API 接口供集成使用

  • 插件系统:支持通过插件扩展功能(如条形码识别、双面扫描处理等)

安装指南

系统要求

  • Docker 和 Docker Compose

  • Python 3.10-3.12

安装步骤

  1. 克隆项目仓库:


   git clone https://github.com/paperless-ngx/paperless-ngx.git   cd paperless-ngx
复制代码


  1. 复制并修改环境配置文件:


   cp docker-compose.env.yml.example docker-compose.env.yml
复制代码


  1. 启动服务:


   docker-compose up -d
复制代码


  1. 访问应用:


   http://localhost:8000
复制代码

依赖项

  • Redis

  • PostgreSQL

  • Gotenberg(用于文档转换)

  • Apache Tika(用于文本提取)

使用说明

基本使用

  1. 添加文档

  2. 通过 Web 界面上传文档

  3. 使用消费目录自动导入文档

  4. 文档分类

  5. 系统会自动根据内容分类文档

  6. 可手动调整分类结果

  7. 搜索文档

  8. 使用搜索框查找文档

  9. 支持高级搜索和过滤

API 使用示例

import requests
# 获取文档列表response = requests.get("http://localhost:8000/api/documents/", auth=("username", "password"))documents = response.json()
# 上传新文档files = {"document": open("example.pdf", "rb")}response = requests.post("http://localhost:8000/api/documents/post_document/", files=files, auth=("username", "password"))
复制代码

核心代码

文档消费插件系统

class BarcodePlugin(ConsumeTaskPlugin):    """    条形码处理插件,用于识别文档中的条形码    """    NAME: str = "BarcodePlugin"
@property def able_to_run(self) -> bool: return ( settings.CONSUMER_ENABLE_BARCODES and self.input_doc.mime_type == "application/pdf" )
def run(self) -> str | None: # 识别条形码并处理文档 barcodes = self._get_barcodes(self.input_doc.original_file) if not barcodes: return None # 处理找到的条形码 for barcode in barcodes: if barcode.is_separator: self._handle_separator_barcode(barcode) elif barcode.is_asn: self._handle_asn_barcode(barcode) return f"Found {len(barcodes)} barcodes"
复制代码

文档分类器

class DocumentClassifier:    """    文档自动分类器,用于预测文档的对应关系、类型和标签    """    def predict_correspondent(self, content: str) -> int | None:        """        预测文档的对应关系        """        if not self._clf_correspondent:            return None                X = self._vectorizer_correspondent.transform([content])        pred = self._clf_correspondent.predict(X)        if len(pred) > 0 and pred[0] != -1:            return pred[0]        return None
def predict_document_type(self, content: str) -> int | None: """ 预测文档类型 """ if not self._clf_document_type: return None X = self._vectorizer_document_type.transform([content]) pred = self._clf_document_type.predict(X) if len(pred) > 0 and pred[0] != -1: return pred[0] return None
复制代码

文档索引服务

def get_schema() -> Schema:    """    定义文档索引的搜索模式    """    return Schema(        id=NUMERIC(stored=True, unique=True),        title=TEXT(sortable=True),        content=TEXT(),        asn=NUMERIC(sortable=True, signed=False),        correspondent=TEXT(sortable=True),        correspondent_id=NUMERIC(),        document_type=TEXT(sortable=True),        document_type_id=NUMERIC(),        tags=KEYWORD(stored=True, commas=True, scorable=True),        tags_ids=KEYWORD(stored=True, commas=True),        created=DATETIME(sortable=True),        modified=DATETIME(sortable=True),        added=DATETIME(sortable=True),        path_id=KEYWORD(stored=True),        path_name=TEXT(),        owner_id=NUMERIC(),        owner_username=TEXT(),    )
复制代码


更多精彩内容 请关注我的个人公众号 公众号(办公 AI 智能小助手)公众号二维码


办公AI智能小助手


用户头像

qife

关注

还未添加个人签名 2021-05-19 加入

还未添加个人简介

评论

发布
暂无评论
Paperless-ngx 文档管理系统_开源_qife_InfoQ写作社区