AI 语音转录文档批量格式化处理
概述
此技能用于批量处理 AI 语音转文字工具(如手机千问)导出的 .docx 转录文件。将数十个分散的转录文件合并为单一格式化文档,自动完成:文本清洗、AI 关键词过滤、段落合并、核心词提取、关键词加粗、强调词下划线、页码添加,并输出同版 PDF。
核心价值:将零散的 AI 语音转录导出文档一键转换为结构清晰、标记完整的可读文档,消除手动排版和标记的重复劳动。
能力边界
✅ 适用场景
- 用户有多个 AI 语音转录工具(手机千问等)导出的
.docx文件需要合并整理 - 文档内容涉及 AI、科研、学术、技术等主题
- 需要统一的格式化排版和智能标记
- 需要提取每段核心关键词作为阅读导引
❌ 不适用场景
- 非 AI/技术类语音转录(关键词覆盖率可能不足,大量段落会被过滤)
- 单个文件无需合并的简单场景
- 非
.docx格式文档(仅支持 Word 文档) - macOS/Linux 环境(PDF 转换依赖 Windows Word COM 自动化)
- 需要保留原始时间戳和发言人标签的场景
依赖与环境
| 依赖 | 版本要求 | 用途 |
|---|---|---|
| Python | ≥3.7 | 脚本运行环境 |
| python-docx | 最新 | DOCX 读写 |
| jieba | 最新 | 中文分词、关键词提取 |
| gensim | 最新 | LDA 主题模型 |
| pywin32 | 最新 | Word COM 自动化(PDF 转换) |
| Microsoft Word | 任意版本 | PDF 转换引擎 |
pip install python-docx jieba gensim pywin32
使用方式
快速开始(最简)
- 将所有待处理的
.docx文件放入同一个目录 - 在该目录下运行脚本:
cd <包含所有转录docx文件的目录>
python scripts/merge_docs.py
- 脚本自动扫描所有
.docx(跳过已有的合并文档),输出三个文件。
命令行参数
脚本支持完整的 CLI 参数,无需编辑源码即可调整行为:
python scripts/merge_docs.py [选项]
选项:
-w, --workspace PATH 工作目录(默认:当前目录)
-t, --threshold FLOAT AI 关键词覆盖率阈值 (0.0~1.0),默认 0.04 (4%)
--min-sentences N 段落最少句末标点数,默认 3
--max-sentences N 段落最多句末标点数,默认 7
--keywords-file PATH 自定义 AI 关键词文件(一行一个词)
--emphasis-file PATH 自定义强调词文件(一行一个词)
--stopwords-file PATH 自定义停用词文件(一行一个词)
--output-dir PATH 输出目录(默认与工作目录相同)
--no-pdf 跳过 PDF 转换
--no-backup 跳过分词备份文档生成
--no-lda 跳过 LDA 主题模型(加速,减少内存占用)
--dry-run 预览模式:执行全部处理但不写入文件
--sample N 仅处理前 N 个文件(用于快速测试)
-h, --help 显示帮助
常用示例:
# 默认:当前目录,阈值 4%,生成 PDF + 备份
python merge_docs.py
# 降低阈值到 3%,跳过 PDF(快速验证)
python merge_docs.py -t 0.03 --no-pdf --no-backup
# 指定另一个目录处理
python merge_docs.py -w /path/to/other/docs -t 0.02
# 使用自定义关键词列表
python merge_docs.py --keywords-file my_medical_kw.txt
# 快速处理:跳过 LDA + PDF,只出合并文档
python merge_docs.py --no-lda --no-pdf --no-backup
# 预览模式:不写文件,先看统计
python merge_docs.py --dry-run
# 先预览前5个文件
python merge_docs.py --sample 5 --dry-run
# 输出到指定目录
python merge_docs.py --output-dir ./output
关键词配置(无需改代码)
关键词和强调词已外置为独立配置文件,位于 config/ 目录下:
| 文件 | 用途 | 编辑方式 |
|---|---|---|
config/keywords.txt |
AI 关键词(一行一个),匹配到的正文将加粗 | 用文本编辑器增删行即可 |
config/emphasis.txt |
强调词/短语(一行一个),匹配到的将加<u>下划线</u> | 用文本编辑器增删行即可 |
config/stopwords.txt |
停用词(一行一个),关键词提取时忽略这些词 | 用文本编辑器增删行即可 |
- 以
#开头的行视为注释,会被忽略 - 修改后直接重新运行脚本即可生效,无需任何重新打包
- 如果配置文件不存在,脚本自动降级使用内置默认列表
- 也支持通过
--keywords-file/--emphasis-file指定任意路径的文件
输入要求
- 文件格式:
.docx(Word 文档) - 文件命名:任意,脚本按文件名排序处理
- 文件内容:语音转录文本,含时间戳和发言人标签
- 重要:运行时请关闭所有源文档,否则可能读取失败
输出文件
| 文件 | 大小参考 | 说明 |
|---|---|---|
合并文档.docx |
数 MB | 完整处理后的合并文档,含三层标记和页码 |
合并文档.pdf |
数 MB | 同版 PDF |
分词备份文档.docx |
数 MB | 每段含分词结果、核心词、AI 词频比(调试用) |
输入输出示例
输入(原始转录片段):
2025年06月22日 10:02
发言人1 10:02 - 10:05
AI人工智能的核心在于大语言模型的训练过程,这里涉及到很多技术细节。
2025年06月22日 10:06
发言人2 10:06 - 10:09
对,尤其是提示词工程,现在大家都是用自然语言和机器交互。
输出(处理后):
[人工智能 大语言模型 训练]
AI 人工智能的核心在于大语言模型的训练过程,这里涉及到很多技术细节。
[提示词工程 交互 自然语言]
对,尤其是提示词工程,现在大家都是用自然语言和机器交互。
其中 AI、人工智能、大语言模型、训练、提示词工程、交互、自然语言 等 AI 关键词会加粗显示;强调短语会添加下划线。
完整处理流程
脚本按以下 8 步顺序执行:
第一步:文本清洗
- 移除时间戳格式:
2025年05月28日 10:38、10:38 - 10:45 - 移除发言人标签:
发言人1:、发言人1 10:38 - 10:45 - 合并多余空白字符
第二步:AI 关键词过滤
- 内置 315 个 AI/科研/技术关键词(可通过
config/keywords.txt扩展) - 计算「关键词字符覆盖率」= 匹配到的关键词字符数 ÷ 段落总字符数
- 覆盖率 < 4% 的段落直接丢弃(与 AI/技术无关的闲聊段落被自动过滤)
第三步:短段组合并
- 贪婪累积算法
- 目标:每段 3-7 个 句末标点(。?!)
- 仅在同一原始文档内部合并,不跨文档标题
- 典型效果:段落数减少 10-15%
第四步:段首核心词提取
使用四种算法综合投票:
| 算法 | 权重 | 说明 |
|---|---|---|
| TextRank | 2 | 基于图的排序算法 |
| TF-IDF | 2 | 词频-逆文档频率 |
| RAKE | 1 | 快速自动关键词提取(中文适配版) |
| LDA | 1 | 主题模型(15 主题) |
- 相邻段落区分度处理:与邻居重叠的词降权(-2),当前段独有词升权(+1),确保相邻段落的核心词有区分度
- 每段选 3 个,以
[词1 词2 词3]格式置于段首
第五步:正文三层标记
| 标记层 | 规则 | 实现方式 |
|---|---|---|
| 加粗 | 仅对 AI 关键词列表(315 个,可扩展)中的词标粗 | 逐字符大小写不敏感正则匹配 |
| <u>下划线</u> | 对 242 个强调词/短语(如"非常"、"一定要注意"、"说白了")加下划线 | 按长度降序正则匹配,复制原格式后追加 |
| 段首关键词 | 不加粗不下划线,纯文本置于方括号内 | — |
两标记层独立运行,互不干扰。bold+underline 同时出现的仅约 1%。
第六步:格式化输出
- 字体:仿宋
- 正文:五号(10.5pt)
- 标题:16pt 加粗
- 行距:单倍行距
- 页边距:窄(1.27cm 四边)
- 无分页符、无段前段后间距
第七步:添加页码
- 每页底部居中,仿宋 9pt,动态 PAGE 字段
第八步:输出文件
生成三个文件:合并文档(.docx)、PDF、分词备份(.docx)。
自定义配置
关键词调整(推荐方式)
直接编辑 config/keywords.txt 和 config/emphasis.txt,修改后重新运行脚本即可。
高级调整(脚本内部)
若需修改更深层逻辑,编辑 scripts/merge_docs.py:
- 段落句子数:通过 CLI
--min-sentences/--max-sentences或修改merge_short_paragraphs()调用参数 - 字体/字号/页边距:修改
BODY_FONT、BODY_SIZE、TITLE_SIZE、NARROW_MARGIN常量 - LDA 主题数:修改
train_lda()中的num_topics计算逻辑
修改后重新运行脚本即可生效。
故障排除
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| "没有段落通过过滤" | 文档内容不包含 AI 关键词,或关键词覆盖率太低 | 检查文档内容是否为 AI/技术主题;如确为主题内容,可降低过滤阈值到 0.02 |
| "读取失败: xxx.docx" | 文件被 Word 占用或已损坏 | 关闭所有 Word 窗口后重试;检查文件是否能手动打开 |
| "PDF转换失败" | 未安装 Word 或 pywin32 | 安装 Microsoft Word;pip install pywin32 |
| "jieba 初始化慢" | 首次运行需下载词典 | 等待完成,后续运行会使用缓存 |
| "LDA 语料不足" | 过滤后段落过少 | 降低过滤阈值或增加源文档数量 |
| 段落数过少 | 关键词覆盖率阈值太高 | 将 0.04 降低到 0.02-0.03 |
| 合并后仍有大量短段落 | 原文档内容本身句子较少 | 属于正常现象(标题类段落),不影响阅读 |
安全说明
- 纯本地处理:所有文件读取和写入均在本机完成,不上传任何数据到云端
- 最小权限:仅读取
.docx文件并写入输出文件,不访问其他系统资源 - PDF 转换:通过本地 Word COM 自动化完成,不需要第三方 PDF 服务
- 不修改源文件:源文档仅读取,不会被修改或删除
- 隐私提醒:语音转录文件可能包含个人对话内容,请确认转录内容不涉及他人隐私后再运行批量处理;输出文件会保留转录的原始语义内容
版本历史
详见 CHANGELOG.md。
- v1.2.0 (2026-08-02):全函数类型注解、dry-run预览模式、样本测试、输出校验、停用词外置、输出目录分离、自动页码
- v1.1.0 (2026-08-02):外部配置文件系统、CLI 参数、降级状态追踪
- v1.0.0 (2026-08-02):初始发布
技术说明
- 脚本路径:
scripts/merge_docs.py(约1300行,含完整类型注解) - 配置文件:
config/keywords.txt(315 个 AI 关键词)、config/emphasis.txt(242 个强调词)、config/stopwords.txt(停用词) - 工作目录:默认
os.getcwd(),支持--workspace指定;输出目录支持--output-dir分离 - 处理速度:57 个文件约 2 分钟(不含 PDF)或 5 分钟(含 PDF + LDA 全量)
- 内存占用:中等(需加载所有段落到内存做 LDA 训练)