面向审阅和校对场景的 .docx 文档比对工具。你可以在浏览器中上传基准文档与修订文档,快速查看新增、删除和修改位置。
项目基于 Vue 3、Vite、mammoth 和 diff-match-patch 构建,文档解析、文本归一化、差异计算和双栏高亮均在本地浏览器内完成。
- 📥 双栏上传基准文档与修订文档,直接进行对照审阅。
- 🔍 支持语义级、词组级、字符级三种比对粒度,兼顾快速审阅与精细校对。
- 🧭 支持差异导航,可在上一处、下一处差异之间快速跳转。
- 🔗 支持双视图同步滚动,长文档对照时更容易保持上下文。
- 🧹 支持忽略空白、统一全半角、忽略大小写,减少格式差异带来的干扰。
- 🧩 保留原文档结构展示,并将归一化后的差异映射回原始 DOM 文本位置。
用于忽略常见版式差异,减少排版、转换或文档结构变化带来的干扰。
当前会处理的典型情况包括:
- 段落或列表项合并造成的多余换行或空白。
- 条款、列表编号后的版式空白,例如
1.3.1. 访问。 - 中文、英文、数字混排中的空白,例如
2025 年、A 座、8 号。 - 数字内部空白,例如电话、日期、编号中的
010 59618935。 - 邮箱、域名、URL 中的局部空白,例如
Yuki. Sun@example. com。 - 中文上下文里的字段标点空白,例如
邮箱: name@example.com和邮箱:name@example.com。
普通英文词间空格不会默认忽略,例如 Wolters Kluwer,以避免将英文正文中的真实差异误判为格式差异。
用于统一全角 ASCII 与半角 ASCII 的差异,包括全角字母、数字和常见符号。
- 📝 普通文档版本比对:按需开启
忽略空白、统一全半角。 - 🎯 严格逐字符校对:选择字符级颗粒度,并关闭不需要的归一化开关。
- 🔎 转换后文档比对:建议开启
忽略空白,减少格式转换带来的空白差异。
npm install
npm run dev常用检查:
npm run typecheck
npm run build- 📦
.docx解析由 mammoth 完成。 - 🧮 文本比对由 diff-match-patch 完成。
- 🧱 文本映射、空白折叠和归一化规则集中在
src/utils/documentText.ts。 - 🎯 差异标记通过原始文本节点映射回 DOM,避免归一化逻辑散落到渲染层。