doc-etl/README.md
2025-05-16 11:30:02 +08:00

361 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 文档处理系统
本系统用于处理和转换文档支持PDF和Word文档的处理。
## 系统要求
### 必需组件
1. Python 3.8 或更高版本
2. LibreOffice用于文档格式转换
- 下载地址https://www.libreoffice.org/download/download/
- 安装后需要将安装目录(通常是 `C:\Program Files\LibreOffice\program``C:\Program Files (x86)\LibreOffice\program`)添加到系统 PATH 环境变量
- 如果安装后仍然报错,请尝试重启系统
3. Tesseract OCR用于图片文字识别
- 下载地址https://github.com/UB-Mannheim/tesseract/wiki
- 安装时选择"添加到系统路径"选项
### Python 依赖
所有必需的 Python 包都列在 `requirements.txt` 文件中。使用以下命令安装:
```bash
pip install -r requirements.txt
```
## 功能特性
- 支持多种文档格式的处理:
- PDF 文件
- Word 文档 (.doc, .docx)
- HTML 文件 (.html, .htm)
- Excel 文件 (.xls, .xlsx)
- 自动提取文档中的表格和图片
- 智能清理和格式化文本内容
- 支持多种输出格式:
- Word 文档 (.docx)
- 纯文本文件 (.txt)
- Markdown 文件 (.md)
- 提供 RESTful API 接口
- 高级OCR图像识别功能
- 独立的OCR测试Web界面
- 多种图像预处理算法
- 支持中文优化的OCR处理
- 自动选择最佳OCR结果
- 直观显示不同处理方法的效果对比
- 可视化处理前后的图像变化
## 最近更新
### 2024年5月21日
- **增强复杂表格处理的安全性和稳定性**
- 全面优化索引安全处理,解决表格解析中的索引越界问题
- 增加表格行列索引检查机制,防止数组访问异常
- 引入垂直合并传播机制,自动填充复杂表格中的间隔空白单元格
- 增强多级分类表格处理,针对药品分类等特殊表格格式的优化
- 改进空白单元格智能填充算法,分析上下文识别合并单元格模式
- 优化错误日志记录,提供精确的错误位置信息便于问题定位
- 统一文本和Markdown输出处理逻辑确保不同格式输出的一致性
- 修复多行多列复杂表格中的内容缺失问题,提高数据完整性
### 2024年5月20日
- **增强复杂表格合并单元格识别能力**
- 改进垂直合并单元格的识别逻辑,即使未被正确标记的合并单元格也能被识别出来
- 特别优化对药品分类等表格中常见的第一列垂直合并单元格的处理
- 新增内容一致性检测机制,自动识别内容相同但分布在不同行的单元格
- 添加空白单元格智能填充机制,推断可能的合并单元格内容
- 统一文本与Markdown表格输出中对合并单元格的处理逻辑
- 对合并单元格内容进行正确复制,确保表格展示的结构完整性
- 提高对格式不规范表格的兼容性和处理能力
### 2024年5月19日
- **表格处理模块化重构**
- 将表格处理相关代码抽取到独立模块`cxs_table_processor.py`
- 实现`TableProcessor`类,封装所有表格相关的处理功能
- 保留`TableData`类作为表格数据的标准存储结构
- 优化代码结构,提高可维护性和扩展性
- 改进表格处理模块与主程序的交互接口
- 实现统一的表格处理方法调用方式
- 便于后续对表格处理功能的单独升级和优化
### 2024-05-16
- 增强了复杂表格处理能力
- 优化了对合并单元格表格的识别和处理
- 降低了表格有效性的判断门槛,能够识别更多种类的表格
- 改进了表格到Markdown的转换添加了HTML格式输出选项
- 完善了对垂直合并单元格的处理逻辑
- 增强了表格内容矩阵的构建和处理
- 优化了药品分类等复杂结构表格的识别
- 改进了表格文本输出格式,提高可读性
### 2024-05-15
- 修复了cxs_doc_cleaner.py中的语法错误
- 解决了处理文档元素时的try-except块和缩进结构问题
- 改进了表格和段落处理的代码结构
- 确保所有异常处理逻辑正确嵌套
- 优化了错误信息输出格式
### 2024-05-12
- 修复了`Table`类初始化错误问题
- 创建了自定义`TableData`类代替直接使用`docx.table.Table`
- 解决了`Table.__init__() missing 2 required positional arguments: 'tbl' and 'parent'`错误
- 重构了相关代码以适配新的类结构
- 优化了列属性处理方式
- 改进了单元格访问方法
- 添加了`test_big_file.py`工具
- 专门用于从大型复杂Word文档中提取表格
- 支持自动识别文档中的所有表格
- 实现了更强大的表格内容提取逻辑
- 可以处理合并单元格和复杂结构
- 生成格式友好的表格文本输出
### 2024-05-02
- 修复文档中图片OCR无法识别的问题
- 添加pytesseract显式导入确保OCR组件可用
- 优化Tesseract OCR路径自动检测和配置流程
- 增加pytesseract版本检测机制确保OCR组件正常工作
- 改进OCR处理流程添加直接调用pytesseract模式不再完全依赖pdf_processor
- 添加多重OCR尝试策略提高图片文字识别成功率
- 增强OCR错误处理和日志记录便于问题诊断
- 简化单图片OCR处理逻辑增加文本预览功能
- 修复PdfProcessor类中缺少_is_valid_image方法的问题解决图片验证失败的错误
### 2024-01-20
- 修复文档中图片OCR识别问题
- 解决了从Word文档中提取的图片无法被OCR识别的问题
- 增加了Tesseract OCR路径自动检测和配置功能
- 添加了独立的图片OCR测试工具方便排查问题
- 优化了图像提取和OCR处理流程提高识别成功率
- 增强了图像预处理算法,改进对不同格式图片的支持
- 新增fix_tesseract_path.py脚本提供一键修复和测试功能
### 2024-01-19
- 修复Word文档图像提取和OCR功能
- 修复了Word文档处理流程中图像提取功能未被正确调用的问题
- 增强了调试日志系统提供更详细的图像提取和OCR处理信息
- 优化了文档处理流程确保图像OCR结果被正确保存和展示
- 添加了更多统计信息包括图像提取数量和OCR识别成功率
- 改进了不同文件格式的处理逻辑,确保最大兼容性
- 增强了错误处理能力,提高了系统的鲁棒性和稳定性
### 2024-01-18
- 增强了DOCX文档中图像的提取与OCR识别能力
- 实现了三种不同的图像提取方法确保各种格式的Word文档中的图像都能被正确提取
- 为图像提取和OCR处理添加了全面的调试日志记录每个步骤的处理结果
- 增加了原始图像和处理后图像的保存功能便于分析OCR失败的原因
- 优化了图像过滤机制,自动识别并排除无效的小图像和非图像文件
- 引入中文优化的二次识别机制,提高中文图像的文字识别率
- 添加了详细的处理统计信息,包括成功识别率和处理时间
- 改进了错误处理和异常报告,提高系统稳定性
- 增加了中文OCR专用图像优化模块 `_optimize_for_chinese.py`
- 提供9种针对中文文本的图像处理方法适用于不同场景
- 支持图像倾斜校正,提高不规则拍摄图像的识别率
- 针对中文笔画特点优化的形态学处理算法
- 提供一体化的中文OCR预处理流程
- 自动判断最佳处理方法优化OCR结果
### 2024-01-17
- 新增OCR测试Web界面便于快速测试图像文字识别效果
- 开发了独立的OCR API服务支持多种图像处理模式
- 引入自动选择最佳OCR结果的机制通过对比不同处理方法的结果选择最优方案
- 可视化展示图像处理细节和实时预览效果
- 简化OCR测试流程支持拖放上传图像并一键处理
- 提供快速启动脚本,自动检查环境和依赖
- 优化调试文件存储和显示,方便问题分析
### 2024-01-16
- 大幅增强了OCR图像识别能力提高了复杂图像的文字识别率
- 引入了9种新的图像预处理方法并自动进行组合尝试
- 新增图像纠偏和倾斜校正,提高对歪斜文本的识别能力
- 增加针对中文处理的专项优化
- 增加超高DPI处理提高小字体和复杂字符的识别率
- 引入基于PSM模式的多方案OCR处理自动选择最佳结果
- 改进OCR结果评估机制综合考虑文本长度和置信度
- 增加图像处理调试功能,自动保存处理前后的图像用于分析
- 优化OCR结果报表提供各种处理方法的对比和详细统计
### 2024-01-15
- 增强了OCR功能
- 改进了PDF处理器中的OCR文本识别功能
- 增强了Tesseract OCR路径检测
- 添加了OCR识别重试机制
### 2024-01-14
- 优化文档图片OCR识别功能大幅提升Word文档内图片文本识别率
- 增强图片处理逻辑,添加文件类型验证,防止非图片文件误处理
- 增加OCR失败重试机制提高文本识别成功率
- 添加更多调试信息,帮助排查图片处理问题
- 改进Markdown输出中图片显示方式正确标识无法识别文本的图片
### 2024-01-13
- 添加openpyxl依赖库修复Excel文件处理的依赖问题
- 更新requirements.txt文件确保Excel文件可以正确读取
- 优化Excel文件处理逻辑解决处理大型Excel文件时卡住的问题
- 增加直接处理Excel文件选项不必转换为Word格式
- 限制处理的Excel行数提高大型文件处理效率
- 改进临时文件处理机制,增加文件删除重试功能
- 优化Excel文件句柄管理确保文件资源及时释放
### 2024-01-12
- 优化Markdown文档输出格式使其更接近原文排版
- 改进复杂表格的Markdown转换提高可读性
- 修复图片无法在Markdown中正确显示的问题
- 增强文档结构识别,自动识别标题层级
### 2024-01-11
- 修复缺少uuid库导入的问题
- 改进图片目录创建逻辑
- 优化文件路径处理机制
### 2024-01-10
- 新增支持 HTML 文件处理
- 新增支持 Excel 文件处理
- 优化文件格式处理逻辑
- 改进错误处理机制
### 2024-01-09
- 新增 Markdown 格式输出支持
- 优化文件处理逻辑
- 改进错误处理
## 安装说明
1. 克隆项目代码
2. 安装依赖:
```bash
pip install -r requirements.txt
```
3. 配置环境变量(可选):
- OLLAMA_HOSTOllama 服务器地址
- TESSERACT_CMDTesseract OCR 可执行文件路径
## 使用说明
### 文件上传
- 支持的文件格式:
- PDF (.pdf)
- Word (.doc, .docx)
- HTML (.html, .htm)
- Excel (.xls, .xlsx)
### API 接口
- 文件上传POST `/api/upload`
- 文件下载GET `/api/download/{filename}`
### 输出格式
- Word 文档:`response_文件名_output.docx`
- 纯文本文件:`response_文件名_output.txt`
- Markdown 文件:`response_文件名_output.md`
### OCR图像识别测试
使用OCR测试功能可以快速测试图像文字识别效果无需处理完整文档。
#### 快速启动方法
1. 运行项目根目录下的启动脚本:
```bash
python start_ocr_test.py
```
脚本会自动:
- 检查必要依赖是否安装
- 验证Tesseract OCR配置
- 启动OCR API服务
- 在浏览器中打开测试界面
2. 如果自动打开浏览器失败,请手动访问:
```
http://localhost:8001/static/ocr_test.html
```
#### 使用方法
1. 在测试界面上传图片文件(支持拖放上传)
2. 选择识别语言(默认为中文+英文)
3. 选择处理模式:
- **自动模式**:自动尝试最佳处理方法
- **标准模式**使用基本OCR处理速度最快
- **中文优化**:专为中文文本优化的处理方法
- **高级模式**:使用多种图像处理方法,并比较结果
4. 点击"执行OCR"按钮开始处理
5. 查看处理结果:
- **识别文本**:显示识别出的文本内容
- **处理详情**:显示不同处理方法的结果对比
- **处理图像**:显示处理前后的图像效果
#### 处理模式说明
- **自动模式**:适合大多数图像,自动选择最佳处理方法
- **标准模式**:适合清晰、对比度高的图像,处理速度最快
- **中文优化**:适合包含中文的图像,特别是小字体或模糊的中文文本
- **高级模式**:适合复杂图像,会尝试多种处理方法并选择最佳结果,处理时间较长
## 注意事项
1. Excel 文件处理时会将每个工作表转换为单独的章节
2. HTML 文件会保留基本的文本格式和表格结构
3. 所有临时文件会保存在 `temp` 目录下
## 开发说明
### 目录结构
```
doc-etl/
├── cxs/
│ ├── static/ # 前端文件
│ │ └── ocr_test.html # OCR测试界面
│ ├── main.py # 主程序
│ ├── cxs_doc_cleaner.py # 文档处理核心
│ ├── cxs_table_processor.py # 表格处理模块
│ ├── cxs_pdf_cleaner.py # PDF处理模块
│ ├── _optimize_for_chinese.py # 中文OCR优化模块
│ └── ocr_api.py # OCR API服务
├── temp/
│ ├── uploads/ # 上传文件
│ ├── outputs/ # 输出文件
│ ├── images/ # 临时图片
│ └── debug/ # OCR处理调试图像
├── start_ocr_test.py # OCR测试启动脚本
└── requirements.txt # 依赖清单
```
### 开发环境
- Python 3.8+
- 依赖详见 requirements.txt
## 图像OCR问题排查
### 问题: 文档中图片OCR无法识别
如果您遇到文档处理时图片OCR识别失败的问题很可能是因为Tesseract OCR工具的路径配置不正确。系统在初始化时会尝试自动查找Tesseract但如果系统环境变量中没有正确配置OCR功能可能无法正常工作。
### 解决方案
我们提供了一个修复脚本`fix_tesseract_path.py`,它可以:
1. 自动查找系统中已安装的Tesseract OCR
2. 正确设置Tesseract路径
3. 处理您的文档并启用图片OCR功能
使用方法:
```bash
# 直接处理指定文档
python fix_tesseract_path.py --file 您的文档.docx
# 指定Tesseract路径
python fix_tesseract_path.py --file 您的文档.docx --tesseract "C:\Program Files\Tesseract-OCR\tesseract.exe"
# 交互式模式
python fix_tesseract_path.py
```
### 注意事项
1. 确保已安装Tesseract OCR如未安装请从[官方GitHub](https://github.com/UB-Mannheim/tesseract/wiki)下载并安装
2. 安装时选择中文语言包以支持中文OCR识别
3. 建议将Tesseract添加到系统PATH环境变量中或在配置文件中明确指定路径
### 手动设置Tesseract路径
如果您希望永久解决这个问题,可以:
1. 将Tesseract安装目录(通常是`C:\Program Files\Tesseract-OCR`)添加到系统PATH环境变量
2. 设置环境变量`TESSERACT_CMD`为Tesseract可执行文件的完整路径