文字排版 (text-typeset)
将任意来源的杂乱文字,整理为格式统一、干净无冗余、语句通顺的标准 Word 文档。
适用场景
- 用户粘贴杂乱文本、聊天记录、零散笔记,要求整理成文档。
- 用户上传 Word(.docx)、PDF、图片(截图/扫描件),要求重新排版为标准文档。
- 用户提交会议录音/记录(如 docx 转写稿),要求梳理内容并整理成会议纪要。
- 用户要求「清理格式」「去冗余」「统一格式」「文字净化」等。
核心原则
- 只清理、不篡改语义:删除冗余与噪声,修正明显错误,但绝不改写原意、不增删观点、不改变原文语气与专业术语。
- 格式零混乱:输出文档的字体、行距、段缩进、标题层级全局统一(标准见
references/style-standard.md)。 - 先确定性清洗,后智能校对:机器规则能稳定处理的(空行、空格、乱码、重复、符号),用脚本
scripts/clean_text.py;需要理解语义的(错别字、语病、语序),由模型在上下文中判断。
工作流程
阶段 0:接收与判定输入类型
- 纯文本(聊天/粘贴):直接用,跳过 OCR。
- 图片(png/jpg/...):用 Read 工具以多模态方式读取,逐张提取文字与版面,视作 OCR。多张图逐一读取。
- PDF:用 Read 工具逐页提取文字与视觉内容。
- Word(.docx):用
scripts/extract_docx.py抽取纯文本(保留段落结构);若不可用则改用 Read 工具读取。 - 输出一份「原始提取文本」,命名为
raw.txt,存入当前工作目录。
阶段 1:确定性清洗(脚本)
运行 scripts/clean_text.py,对 raw.txt 做以下处理(顺序固定):
- 统一换行符(CRLF/CR → LF),去除 BOM 与零宽字符(\u200b \u200c \u200d \u2060 \ufeff)。
- 去除控制字符与乱码占位符(\ufffd 及不可见控制字符)。
- 每行去除首尾空格/制表符/全角空格;行内多个空格/制表符/全角空格折叠为单个半角空格。
- 删除连续重复的空行(最多保留一个)。
- 删除连续重复的整行(完全相同的相邻行只留一条)。
- 句级去重:以
。!?!?切分,删除相邻重复的整句。 - 折叠重复标点:
。。→。、!!→!、??→?、,,→,等。
输出 cleaned.txt。脚本为纯标准库实现,无第三方依赖。
python3 scripts/clean_text.py raw.txt -o cleaned.txt
# 也支持从 stdin 读取:cat raw.txt | python3 scripts/clean_text.py - -o cleaned.txt
阶段 2:智能校对与结构化(模型执行)
读取 cleaned.txt,在上下文中完成:
- 校对:识别并修正错别字、明显语病、语序错乱。仅改「明显错误」,存疑不改;保留专业术语、人名、地名、缩略语原貌。
- 结构化:依据内容语义划分章节,用 Markdown 标题标识层级:
-# 一级标题(章)、## 二级标题(节)、### 三级标题(子节)。
- 仅用 1–3 级标题,层级连续不跳级。
- 若原文无明确标题,依据主题归纳 2–4 个合理章节,不要强行编造。 - 输出:将校对并结构化的结果写为
structured.md(轻量 Markdown:标题行 + 普通段落,每行一段,空行分段)。
> 注意:此阶段产出的是「干净的结构化文本」,格式化排版由阶段 3 的脚本统一接管,模型不要手动设字体/行距。
阶段 3:生成标准化 Word 文档(脚本)
运行 scripts/build_docx.py,把 structured.md 转为格式完全统一的 .docx:
python3 scripts/build_docx.py structured.md -o 排版结果.docx
脚本按 references/style-standard.md 的统一标准应用(默认党政机关公文 GB/T 9704 + 八级中文编号):大标题 2 号小标宋居中;一级~八级标题全部靠左、缩进 0、加粗(一级黑体 一、二、三 / 二级楷体 (一)(二)/ 三级仿宋 1、2、3 / 四级 (1)/ 五级 ① / 六级 1)/ 七级 a、/ 八级 a);正文仿宋 3 号、首行缩进 2 字符、行距固定值 29.5 磅、数字字母 Times New Roman,且逐行保留原换行(每行原文=一个独立段落,不跨行合并)。编号由脚本按 Markdown # 层级自动生成并随父级重置,旧编号自动剥离。无需模型再干预格式。
会议纪要(会议录音/记录整理)
当用户提交会议录音转写稿或会议记录,要求整理成纪要时,同时输出两种格式的文件:
- 文件一(普通公文层级版):用
build_docx.py按八级中文编号公文排版生成完整详细纪要(大标题居中 + 黑体/楷体/仿宋三级标题 + 仿宋正文)。结构化稿为普通 Markdown(无 frontmatter、不加--minutes),章节从「一、会议背景与议题」到「六、后续事项」完整展开。 - 文件二(会议纪要模板版):用
build_minutes_template.py套用用户提供的表格型会议纪要模板(如会议纪要_模版_20220921.docx)。输入 md 顶部 frontmatter 用模板:字段指定模板 docx 路径,并提供标量字段(时间/地点/主持人/记录人/参会人员/议题);其后用## 会议目的、## 后续要求两个区块提供多行内容。该版只提取会议要点:会议目的是什么、有哪些结论,不展开详细章节。模板原有的段落格式与字体自动保留。
通用约定:
- 先抽取原文(docx 用 extract_docx.py;图片/PDF 用 Read 多模态 OCR),口语转书面,保留关键数据与结论。
- 跨多份会议文件时,每份独立成稿,文件名带日期/主题便于区分(如 2026-09-11_顾宋面试_公文版.docx / _模板版.docx)。
- 信息缺失处标注「以原始记录为准」,不臆造。详见 references/meeting-minutes-template.md。
阶段 4:交付
- 用
present_files展示生成的.docx。 - 附一句话说明:清洗删除了什么、校对修正了哪些明显问题(不逐条罗列,仅概要)。
安全与隐私
本技能全部在本地执行,安全边界明确:
- 仅读取用户明确传入的文件(文本、图片、PDF、docx),不主动扫描或访问工作区外的目录。
- 脚本均为确定性文件处理,仅依赖 Python 标准库与
python-docx,不发起任何网络请求、不调用外部命令、不执行动态下载的代码。 - 输出仅生成
.docx文档,不写入或删除用户其他文件。 - 不收集、不上传任何用户内容。
依赖
scripts/build_docx.py 与 scripts/extract_docx.py 依赖 python-docx。首次使用先安装:
pip install python-docx
文件清单
scripts/clean_text.py— 确定性清洗(无依赖)。scripts/build_docx.py— 结构化 Markdown → 标准化 docx(八级中文编号公文排版;普通公文层级版用此)。scripts/build_minutes_template.py— 基于用户表格型模板,填入会议目的/结论,生成会议纪要模板版。scripts/extract_docx.py— docx → 纯文本(可选,输入为 Word 时使用)。references/style-standard.md— 统一排版标准(字体/行距/缩进/标题层级/八级编号)。references/meeting-minutes-template.md— 会议纪要结构化章节约定(录音/记录→纪要)。