From d8747e983131f7296eaa88914f56755435729f2e Mon Sep 17 00:00:00 2001 From: lanyuanxiaoyao Date: Wed, 11 Feb 2026 18:06:53 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=84=9A=E6=9C=AC=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E8=AF=B4=E6=98=8E=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- temp/docx_parser.md | 331 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 331 insertions(+) create mode 100644 temp/docx_parser.md diff --git a/temp/docx_parser.md b/temp/docx_parser.md new file mode 100644 index 0000000..901d93e --- /dev/null +++ b/temp/docx_parser.md @@ -0,0 +1,331 @@ +# DOCX 解析器使用说明 + +## 简介 + +`docx_parser.py` 是一个功能强大的 DOCX 文件解析工具,支持将 Microsoft Word (.docx) 文档转换为 Markdown 格式。该脚本采用多策略解析机制,按优先级尝试以下解析方法: + +1. **MarkItDown**(微软官方库) +2. **python-docx**(成熟的 Python 库) +3. **XML 原生解析**(备选方案) + +## 环境要求 + +- Python 3.6+ +- pip + +## 安装依赖 + +根据你的需求安装相应的解析库: + +```bash +# 安装 MarkItDown(推荐) +pip install markitdown + +# 安装 python-docx(备选) +pip install python-docx +``` + +> 注意:建议至少安装一种解析库。如果未安装任何库,脚本会尝试使用 XML 原生解析,但功能可能受限。 + +## 命令行参数 + +### 基本语法 + +```bash +python3 docx_parser.py [options] +``` + +### 位置参数 + +| 参数 | 说明 | +|------|------| +| `file_path` | DOCX 文件的绝对路径 | + +### 选项参数 + +| 参数 | 长参数 | 类型 | 默认值 | 说明 | +|------|--------|------|--------|------| +| `-n` | `--context` | 整数 | 2 | 与 `-s` 配合使用,指定每个检索结果包含的前后行数(不包含空行) | + +### 互斥参数 + +以下参数只能使用其中一个: + +| 参数 | 长参数 | 说明 | +|------|--------|------| +| `-c` | `--count` | 返回解析后的 markdown 文档的总字数 | +| `-l` | `--lines` | 返回解析后的 markdown 文档的总行数 | +| `-t` | `--titles` | 返回解析后的 markdown 文档的标题行(1-6级) | +| `-tc` | `--title-content` | 指定标题名称,输出该标题及其下级内容(不包含#号) | +| `-s` | `--search` | 使用正则表达式搜索文档,返回所有匹配结果(用---分隔) | + +## 使用示例 + +### 1. 输出完整 Markdown 内容 + +```bash +python3 docx_parser.py /path/to/document.docx +``` + +输出:完整的 Markdown 格式文档内容 + +### 2. 获取文档字数 + +```bash +python3 docx_parser.py -c /path/to/document.docx +``` + +输出:文档总字数(数字) + +### 3. 获取文档行数 + +```bash +python3 docx_parser.py -l /path/to/document.docx +``` + +输出:文档总行数(数字) + +### 4. 提取所有标题 + +```bash +python3 docx_parser.py -t /path/to/document.docx +``` + +输出示例: +``` +# 主标题 +## 第一章 +### 1.1 简介 +### 1.2 内容 +## 第二章 +``` + +### 5. 提取指定标题内容 + +```bash +python3 docx_parser.py -tc "第一章" /path/to/document.docx +``` + +输出:包含所有上级标题的指定章节内容 + +**特点:** +- 支持多个同名标题 +- 自动包含完整的上级标题链 +- 包含所有下级内容 + +示例输出: +``` +# 主标题 +## 第一章 +这是第一章的内容 +包含所有子章节... + +### 1.1 简介 +简介内容 + +### 1.2 内容 +详细内容 +``` + +### 6. 搜索关键词 + +#### 6.1 基本搜索 + +```bash +python3 docx_parser.py -s "关键词" /path/to/document.docx +``` + +输出:所有匹配关键词的内容片段,默认前后各 2 行上下文,用 `---` 分隔 + +#### 6.2 自定义上下文行数 + +```bash +# 前后各 5 行 +python3 docx_parser.py -s "关键词" -n 5 /path/to/document.docx + +# 不包含上下文 +python3 docx_parser.py -s "关键词" -n 0 /path/to/document.docx +``` + +#### 6.3 正则表达式搜索 + +```bash +# 搜索包含数字的行 +python3 docx_parser.py -s r"数字\d+" /path/to/document.docx + +# 搜索邮箱地址 +python3 docx_parser.py -s r"\b[\w.-]+@[\w.-]+\.\w+\b" /path/to/document.docx + +# 搜索日期格式 +python3 docx_parser.py -s r"\d{4}-\d{2}-\d{2}" /path/to/document.docx +``` + +输出示例: +``` +这是前一行 +包含匹配关键词 +这是后一行 +--- +另一个匹配 +--- +第三个匹配 +``` + +### 7. 将输出保存到文件 + +```bash +# 保存完整 Markdown +python3 docx_parser.py /path/to/document.docx > output.md + +# 保存标题内容 +python3 docx_parser.py -tc "第一章" /path/to/document.docx > chapter1.md + +# 保存搜索结果 +python3 docx_parser.py -s "关键词" /path/to/document.docx > search_results.md +``` + +## 功能特性 + +### 多策略解析 + +脚本自动尝试三种解析方法,确保最大的兼容性: + +1. **MarkItDown**:微软官方库,解析效果最佳 +2. **python-docx**:功能完善的第三方库 +3. **XML 原生解析**:不依赖任何库的备选方案 + +### 智能匹配 + +#### 标题提取 + +- 支持 1-6 级标题识别 +- 自动处理不同样式的标题(Title、Heading 1-6) +- 保留原始标题层级关系 + +#### 标题内容提取 + +- 支持同名标题提取 +- 自动构建完整上级标题链 +- 包含所有下级内容 +- 保持文档结构完整 + +#### 搜索功能 + +- 支持正则表达式 +- 智能合并相近匹配 +- 上下文行数控制(不包含空行) +- 结果用 `---` 清晰分隔 + +### 文档处理 + +- 自动移除 Markdown 图片 +- 规范化空白行(连续多个空行合并为一个) +- 支持表格、列表、粗体、斜体、下划线等格式 + +### 错误处理 + +- 文件存在性检查 +- DOCX 格式验证 +- 解析失败时自动尝试下一种方法 +- 详细的错误提示信息 + +## 常见问题 + +### Q: 如何选择解析库? + +A: 建议优先安装 `markitdown`,它是微软官方库,解析效果最好。如果需要更多控制或兼容性,可以同时安装 `python-docx`。 + +### Q: 为什么某些文档解析不完整? + +A: 可能原因: +1. 文档使用特殊格式或样式 +2. 文档已损坏 +3. 未安装合适的解析库 + +尝试安装多个解析库,或检查文档是否损坏。 + +### Q: 如何处理大文档? + +A: 对于非常大的文档,建议: +1. 使用 `-tc` 参数只提取需要的章节 +2. 使用 `-s` 参数搜索特定内容 +3. 将输出重定向到文件进行处理 + +### Q: 搜索功能支持哪些正则表达式? + +A: 支持所有 Python 标准正则表达式语法。需要注意特殊字符的转义: + +```bash +# 错误:括号需要转义 +python3 docx_parser.py -s "(关键词)" /path/to/document.docx + +# 正确 +python3 docx_parser.py -s "\(关键词\)" /path/to/document.docx +``` + +### Q: 如何获取更多上下文? + +A: 使用 `-n` 参数调整上下文行数: + +```bash +# 默认 2 行(推荐) +python3 docx_parser.py -s "关键词" /path/to/document.docx + +# 更多上下文(5 行) +python3 docx_parser.py -s "关键词" -n 5 /path/to/document.docx + +# 不包含上下文 +python3 docx_parser.py -s "关键词" -n 0 /path/to/document.docx +``` + +### Q: 多个同名标题如何处理? + +A: `-tc` 参数会返回所有同名标题,每个标题都包含其完整的上级标题链: + +```markdown +# 主标题 +## 同名标题 1 +内容1 + +# 主标题 +## 同名标题 2 +内容2 +``` + +## 技术细节 + +### 标题识别规则 + +| 样式名称 | Markdown 标题级别 | +|---------|-------------------| +| Title | # | +| Heading 1 | # | +| Heading 2 | ## | +| Heading 3 | ### | +| Heading 4 | #### | +| Heading 5 | ##### | +| Heading 6 | ###### | + +### 列表识别规则 + +| 样式名称 | Markdown 列表格式 | +|---------|------------------| +| List Bullet / Bullet | - (无序列表) | +| List Number / Number | 1. (有序列表) | + +### 文本格式支持 + +| 格式 | 转换结果 | +|------|---------| +| 粗体 | `**文本**` | +| 斜体 | `*文本*` | +| 下划线 | `文本` | +| 表格 | Markdown 表格格式 | + +## 许可证 + +本脚本遵循相关开源许可证。 + +## 贡献 + +欢迎提交问题和改进建议。