235 lines
7.2 KiB
Markdown
235 lines
7.2 KiB
Markdown
# 文档清理工具
|
||
|
||
这是一个用于清理和标准化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格式的文档处理
|
||
- 清理文档中的页眉页脚
|
||
- 保留文档中的表格并维持其原始位置
|
||
- 支持附录的单独处理
|
||
- 文本去重功能
|
||
- 批量处理目录下的所有文档 |