doc-etl/README.md
2025-04-23 11:19:10 +08:00

235 lines
7.2 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.

# 文档清理工具
这是一个用于清理和标准化Word文档(doc/docx)的Python工具主要用于为构建RAG知识库做数据准备工作。
## 主要功能
- 移除页眉页脚(包括页码)
- 删除特殊符号(版权信息、水印等)
- 统一标点符号(全角转半角)
- 分离正文与附录/参考文献
- 删除重复段落(基于文本相似度)
- 自动跳过图片内容
- 支持doc格式自动转换为docx
- 保持原始文档格式统一输出docx格式
- 完整保留表格内容及格式
- 支持表格转换为格式化文本,便于大模型识别
- 同时输出docx和txt格式文件txt文件包含完整的文本内容和表格的文本表示
## 系统要求
- Python 3.6+
- LibreOffice用于转换doc格式文件
### 安装LibreOffice
- macOS:
```bash
brew install libreoffice
```
- Ubuntu/Debian:
```bash
sudo apt-get install libreoffice
```
- Windows:
从[LibreOffice官网](https://www.libreoffice.org/download/download/)下载安装并确保将安装目录添加到系统PATH中。
## 安装依赖
```bash
pip install -r requirements.txt
```
## 使用方法
```bash
python doc_cleaner.py 输入目录
```
### 示例
```bash
python doc_cleaner.py ./input_docs
```
## 输出说明
程序会为每个处理的文档生成两个文件:
- `文档名_cleaned.docx`: 包含清理后的正文内容和附录(如果存在)
- 附录内容会自动添加分页符并在新页面开始
- 所有文件包括原始doc格式都会统一转换并保存为docx格式
- 保持文档格式为docx支持段落对齐等基本格式
- 表格以文本格式显示使用ASCII字符绘制边框和分隔符
- 使用等宽字体Courier New确保表格对齐
- 自动调整列宽以适应内容
- 清晰标识表格序号和位置(正文/附录)
- `文档名_cleaned.txt`: 包含所有文本内容的纯文本文件
- 包含完整的正文内容
- 包含所有表格的文本表示使用ASCII字符绘制
- 保持文档的原始结构(正文、表格、附录的顺序)
- 使用空行分隔不同部分
- 清晰标注表格的序号和位置
## 注意事项
1. 确保输入目录中包含要处理的doc或docx文件
2. 程序会自动创建输出目录(如果不存在)
3. 处理过程中的错误会被记录但不会中断整体处理
4. 相似度阈值默认设置为0.85,可以通过修改代码中的`similarity_threshold`参数调整
5. 输出文件将统一保存为docx格式便于后续编辑和使用
6. 处理doc格式文件需要安装LibreOffice
7. 首次处理doc文件时可能需要较长时间因为需要进行格式转换
## 正则表达式说明
### 页眉页脚匹配模式
- `\d+-\d+`: 匹配类似"1-1"的页码格式
- `第\s*\d+\s*页`: 匹配中文页码
- `Page\s*\d+\s*of\s*\d+`: 匹配英文页码
### 附录标题匹配模式
- `^附录\s*[A-Za-z]?[\s:]`
- `^Appendix\s*[A-Za-z]?[\s:]`
- `^参考文献$`
- `^References$`
- `^Bibliography$`
## 版本历史
### v1.1.0 (2024-01-09)
- 新增完整的表格支持
- 保留表格原始格式和样式
- 优化文档处理流程
### v1.0.0
- 初始版本发布
- 基础文档清理功能
## 更新日志
### 2024-03-21
- 修复了表格位置错误的问题
- 改进了表格占位符的处理机制
- 实现了基于索引的精确表格定位
- 确保表格按原文档位置正确插入
- 重构了文档处理核心逻辑
- 改进了文档元素的解析和存储方式
- 优化了正文和附录的分离逻辑
- 加强了表格位置的追踪机制
- 简化了文档结构处理流程
### 2024-03-xx
- 修复了表格在清理过程中位置错位的问题
- 改进了文本清理逻辑,确保表格占位符不被清理
- 优化了去重算法,保持表格在文档中的原始位置
- 分离表格和文本内容的处理流程,避免交叉影响
### 2024-03-22
- 优化了文件类型检测方法
- 移除了对magic库的依赖
- 改用文件后缀名直接判断文件类型
- 简化了文件类型检测逻辑
### 2024-03-23
- 优化表格处理方式
- 将表格直接转换为文本格式显示在文档中
- 使用ASCII字符绘制表格边框和分隔符
- 采用等宽字体确保表格对齐
- 自动调整列宽以适应内容
- 优化了表格内容的文本对齐方式
- 保留表头样式,便于识别表格结构
- 清晰标识表格序号和位置(正文/附录)
- 移除了原始表格格式,提高可读性和兼容性
### 2024-03-24
- 新增文本文件输出功能
- 同时生成docx和txt格式的输出文件
- txt文件包含完整的文本内容和表格的文本表示
- 保持文档结构和内容的完整性
- 优化了表格在文本文件中的显示效果
### 2024-03-25
- 优化文本输出格式
- 移除文本输出中的换行符
- 使用空格分隔文本内容
- 提高文本的连续性和可读性
### 2024-03-26
- 优化表格文本格式
- 移除ASCII边框字符+和-
- 使用方括号[]标识单元格边界
- 避免JSON解析错误
- 简化表格文本表示方式
### 2024-03-27
- 进一步优化文本输出格式
- 移除所有换行符和多余空格
- 所有内容在单行内显示
- 优化表格文本的连续性
- 确保输出文本的JSON兼容性
### 2024-03-28
- 改进表格输出格式
- 采用表单形式输出表格内容
- 使用"键:值"格式表示每个单元格
- 按行组织表格数据
- 使用表头作为数据项的键名
- 提高表格数据的可读性和结构性
### 2024-03-29
- 完善表格输出格式
- 添加表头行作为第一行输出
- 确保每行数据包含所有字段
- 保持字段顺序与表头一致
- 空值字段显示为空字符串
- 提升数据的完整性和一致性
### 2024-03-30
- 增强复杂表格处理能力
- 支持多级表头的识别和处理
- 正确处理水平和垂直合并单元格
- 智能识别表头行数最多支持3行表头
- 优化表头和数据的关联方式
- 提供更清晰的数据结构表示
- 完善空值和特殊情况的处理
- 确保合并单元格数据的完整性
### 2024-03-31
- 优化表格处理错误处理机制
- 增加多层错误处理,确保程序稳定性
- 改进合并单元格处理逻辑
- 优化空值和异常值的处理方式
- 提供更详细的错误位置信息
- 确保部分错误不影响整体处理
- 完善日志输出,便于问题定位
### 2024-04-01
- 深度优化复杂表格处理
- 改进多级表头的识别和处理算法
- 优化表头层级结构的分析方法
- 增强跨行跨列单元格的处理能力
- 改进表头标识符的构建逻辑
- 提升数据与表头的关联准确性
- 支持更复杂的表格结构解析
- 完善异常情况的处理机制
### 2024-04-02
- 优化表头处理逻辑
- 消除表头中的重复前缀
- 优化多级表头的组合方式
- 改进跨列表头的处理机制
- 增加表头去重功能
- 保持表头层级的清晰性
- 提高表格数据的可读性
- 减少冗余信息
## 功能特性
- 支持doc和docx格式的文档处理
- 清理文档中的页眉页脚
- 保留文档中的表格并维持其原始位置
- 支持附录的单独处理
- 文本去重功能
- 批量处理目录下的所有文档