文档处理
文档处理
相关源文件
本章引用的主要源码文件:
mayan/apps/converter/__init__.pymayan/apps/converter/backends/__init__.pymayan/apps/converter/backends/python.pymayan/apps/converter/classes.pymayan/apps/converter/layers.pymayan/apps/converter/literals.pymayan/apps/converter/migrations/0017_auto_20200810_0504.pymayan/apps/converter/migrations/0018_asset.pymayan/apps/converter/settings.pymayan/apps/converter/tasks.pymayan/apps/document_parsing/parsers.pymayan/apps/documents/forms/document_forms.pymayan/apps/documents/migrations/0007_remove_documentpage_page_label.pymayan/apps/documents/utils.pymayan/apps/dynamic_search/templatetags/__init__.pymayan/apps/dynamic_search/templatetags/search_tags.pymayan/apps/dynamic_search/tests/test_api.pymayan/apps/file_metadata/drivers/exiftool.pymayan/apps/file_metadata/literals.pymayan/apps/file_metadata/tasks.pymayan/apps/metadata/views/__init__.pymayan/apps/metadata/views/document_views.pymayan/apps/metadata/views/metadata_type_views.pymayan/apps/ocr/admin.pymayan/apps/ocr/api_views.pymayan/apps/ocr/apps.pymayan/apps/ocr/backends/literals.pymayan/apps/ocr/backends/tesseract.pymayan/apps/ocr/classes.pymayan/apps/ocr/exceptions.pymayan/apps/ocr/icons.pymayan/apps/ocr/links.pymayan/apps/ocr/models.pymayan/apps/ocr/permissions.pymayan/apps/ocr/serializers.pymayan/apps/ocr/settings.pymayan/apps/ocr/tests/mixins.pymayan/apps/ocr/tests/test_document_version_api.pymayan/apps/ocr/tests/test_links.pymayan/apps/ocr/tests/test_views.pymayan/apps/ocr/urls.pymayan/apps/ocr/views.pymayan/apps/sources/managers.py
本文档记录了 Mayan EDMS 中的文档处理子系统,该子系统负责对上传的文档进行自动转换、文本提取和元数据处理。系统通过多个处理阶段(包括格式转换、OCR(光学字符识别)、内容解析和元数据提取)将原始文档文件转换为可搜索、可查看且组织有序的内容。
关于文档入库和上传机制的信息,请参见文档入库。关于已处理内容的组织和索引详情,请参见文档组织。
核心转换系统
文档转换系统基于 ConverterBase 类构建,该类提供了一个统一接口,用于将各种文档格式转换为图像以供显示和进一步处理。
转换器架构
转换器系统通过可插拔架构支持多个后端:
来源:mayan/apps/converter/classes.py:74-273, mayan/apps/converter/backends/python.py:64-206, mayan/apps/converter/settings.py:61-72
文档格式转换
系统通过特定的转换路径处理多种文档格式:
| 格式类型 | MIME 类型 | 转换方法 | 外部依赖 |
|---|---|---|---|
application/pdf | 使用 PyPDF2 + pdftoppm 直接处理 | pdftoppm, pdfinfo | |
| Office 文档 | 各种 Office/OpenDocument 格式 | 通过 LibreOffice 转换为 PDF | libreoffice |
| 图像 | 标准图像格式 | 使用 PIL/Pillow 处理 | 无(Python 库) |
| MSG 文件 | application/vnd.ms-outlook | 归档提取 + 内容转换 | 无 |
Python 后端实现了核心转换逻辑:
来源:mayan/apps/converter/backends/python.py:64-206, mayan/apps/converter/literals.py:7-51, mayan/apps/converter/classes.py:152-260
OCR 处理系统
OCR 系统使用可配置的 OCR 后端从文档图像中提取文本内容,其中 Tesseract 是主要实现。
OCR 架构
来源:mayan/apps/ocr/classes.py:8-31, mayan/apps/ocr/backends/tesseract.py:20-116, mayan/apps/ocr/models.py:17-74
OCR 后端实现
Tesseract 后端提供了主要的 OCR 功能:
来源:mayan/apps/ocr/backends/tesseract.py:78-116, mayan/apps/ocr/backends/literals.py:1-9
OCR 内容管理
系统通过模型、视图和 API 端点提供全面的 OCR 内容管理:
| 组件 | 用途 | 关键类/方法 |
|---|---|---|
| 内容存储 | 按页面存储提取的文本 | DocumentVersionPageOCRContent |
| 类型设置 | 按文档类型配置自动 OCR | DocumentTypeOCRSettings |
| 提交 | 触发 OCR 处理 | submit_for_ocr() 方法 |
| 内容访问 | 查看和编辑 OCR 结果 | OCR 视图和 API 端点 |
| 内容删除 | 移除 OCR 数据 | delete_content_for() 管理器方法 |
来源:mayan/apps/ocr/models.py:17-74, mayan/apps/ocr/views.py:38-270, mayan/apps/ocr/api_views.py:23-124
文档解析系统
文档解析系统使用特定格式的解析器从文档中提取原始文本内容,主要针对 PDF 文件。
解析器框架
来源:mayan/apps/document_parsing/parsers.py:20-184, mayan/apps/converter/literals.py:7-51
PDF 文本提取
PopplerParser 使用 pdftotext 工具提取文本内容:
来源:mayan/apps/document_parsing/parsers.py:112-163
文件元数据提取
文件元数据系统使用 ExifTool 等外部工具从文档文件中提取技术元数据。
元数据驱动架构
来源:mayan/apps/file_metadata/drivers/exiftool.py:18-74, mayan/apps/file_metadata/literals.py:1-14
处理管线集成
文档处理组件在由文档生命周期事件触发的协调管线中协同工作:
来源:mayan/apps/converter/settings.py:61-72, mayan/apps/ocr/settings.py:15-28, mayan/apps/ocr/apps.py:57-211
任务队列集成
文档处理操作使用 Celery 任务异步执行,以处理资源密集型操作:
来源:mayan/apps/converter/tasks.py:17-65, mayan/apps/file_metadata/tasks.py:17-49, mayan/apps/ocr/methods.py
配置与设置
文档处理系统提供了丰富的配置选项,用于自定义后端行为和外部工具集成:
| 设置类别 | 关键设置 | 用途 |
|---|---|---|
| 图形后端 | CONVERTER_GRAPHICS_BACKEND<br/>CONVERTER_GRAPHICS_BACKEND_ARGUMENTS | 图像转换引擎和参数 |
| OCR 后端 | OCR_BACKEND<br/>OCR_BACKEND_ARGUMENTS | 文本提取引擎和配置 |
| 外部工具 | libreoffice_path<br/>tesseract_path<br/>pdftotext_path | 工具可执行文件位置 |
| 处理限制 | pillow_maximum_image_pixels<br/>tesseract_timeout | 资源和时间约束 |
| 自动处理 | OCR_AUTO_OCR<br/>auto_ocr 按文档类型 | 自动处理触发器 |
来源:mayan/apps/converter/settings.py:20-96, mayan/apps/ocr/settings.py:10-29, mayan/apps/converter/literals.py:85-93