kordoc新旧对照表实战:块级·单元格级文档diff,HWP↔HWPX跨格式差异比较
【免费下载链接】kordoc모두 파싱해버리겠다 — HWP·HWPX·PDF·Office 문서를 Markdown으로. 양식 자동 채우기와 신구대조를 갖춘 CLI·MCP 서버 | Convert Korean documents (HWP, HWPX, PDF, Office) to Markdown — CLI and MCP server with form filling and diff项目地址: https://gitcode.com/gh_mirrors/ko/kordoc
kordoc是一个把韩国公文格式(HWP、HWPX、PDF、Office)一键转成 Markdown 的开源 CLI 与 MCP 工具,除了转换之外,它还内置了一套新旧对照表(신구대조표)引擎:把两个文档逐块对齐,自动输出「新增 / 删除 / 修改 / 不变」四类统计,表格内容还能细到单元格级 diff。最实用的一点是——它工作在 IR(中间表示)层,所以可以直接比较一个 HWP 老文件和它导出的 HWPX 新文件,跨格式找差异毫无障碍。
📋 新旧对照表是什么?为什么需要它
政府公文、合同、提案书在反复修改后,通常要附上「新旧对照表」说明改了什么。手工逐段比对既慢又容易漏。kordoc 的思路是:
- 把两个文档都解析成统一的 IR 块序列(段落、标题、表格等)
- 用 LCS(最长公共子序列)对齐块序列
- 对每一对块计算相似度,归类为四种状态
核心引擎在 src/diff/compare.ts:
| 状态 | 含义 | 判定方式 |
|---|---|---|
unchanged(不变) | 两版完全一致 | 相似度 ≥ 0.99 |
modified(修改) | 同一位置内容变了 | 相似度 0.4 ~ 0.99 |
added(新增) | 新版本多出的块 | 无对应旧块 |
removed(删除) | 新版本被删掉的块 | 无对应新块 |
低于 0.4 的相似度会被拆成「删除 + 新增」两条,避免把整段重写误判成小改动。
🧱 块级 diff:段落与标题如何对齐
块对齐在 src/diff/compare.ts 中基于 LCS 完成,但为了性能做了多层预过滤:
- 类型过滤:段落不会和表格配对,直接跳过
- 长度比过滤:用编辑距离下界快速排除明显不相似的块对,不用真正计算 Levenshtein 距离
- 字符构成上界:先统计两块文字的字符多重集,公共字符比例都不到阈值就直接判负
- 大文档保护:块数乘积超过 1000 万时切换回退对齐策略,防止内存爆炸
这样几千块的长公文也能秒级完成比对。文本相似度本身由 src/diff/text-diff.ts 提供:先做空白归一化再算 Levenshtein 编辑距离,超长的输入会自动降级到 bigram Dice 近似,兼顾速度与稳定。
📊 单元格级 diff:表格改动一目了然
公文里的预算表、日程表是改动高发区。当一对块都是表格时,kordoc 会追加cellDiffs,逐格比较新旧内容,告诉你具体是哪一格从「10 亿」改成了「12 亿」,而不是只说「这个表变了」。
表格相似度还叠加了维度权重(行列结构占 0.3、文字内容占 0.7),所以「删了一行」和「改了一个单元格」都能被正确区分。相关测试用例见 tests/diff.test.ts。
🔁 HWP ↔ HWPX 跨格式比较
这是最有实战价值的场景:单位要求「同一份文件用新旧两种格式各交一版」,你需要确认两份文件内容一致、没有格式转换丢失。
由于比较发生在 IR 层而非原始字节层,구버전.hwp和신버전.hwpx可以直接互比,空白差异会被归一化吸收,不会误报。
🚀 上手:三种使用方式
方式一:MCP 工具(推荐给 AI 工作流)
kordoc 的 MCP 服务器内置compare_documents工具(实现见 src/mcp/tools-parse.ts),只需传入两个文件路径:
{ "tool": "compare_documents", "input": { "file_path_a": "/path/구버전.hwpx", "file_path_b": "/path/신버전.hwpx" } }返回结果为 Markdown 报告:第一行是추가: 3 | 삭제: 1 | 변경: 5 | 동일: 42这样的统计,随后每个变更块带前缀标记——+新增、-删除、~修改(附相似度百分比),可以直接贴进对照表。工具清单见 docs/usage.md。
方式二:Node API
import { compare } from "kordoc" const diff = await compare(구버전Buffer, 신버전Buffer) // diff.stats → { added: 3, removed: 1, modified: 5, unchanged: 42 } // diff.diffs → BlockDiff[](表格含 cellDiffs)方式三:先转 Markdown 再人工核对
两个文件分别用 CLI 转成 Markdown 后,交给任何 diff 工具对比。适合需要精细到字符级(词级textDiff,见 src/diff/text-diff.ts)的场景。
⚙️ 性能细节:大文档也不怕
- 相似度计算带
Uint8Array缓存,同一块对只算一次 - Levenshtein 超过 1 万字符自动切近似算法(bigram Dice),避免 O(m×n) 爆炸
- 词级 diff 在超过 2500 万词对时切换贪心匹配回退
这意味着几百页的 HWP 报告也能在可接受时间内出对照表。
📚 相关资源
- 使用文档:docs/usage.md · 韩文版:사용법.md
- 比较引擎:src/diff/compare.ts · 文本相似度:src/diff/text-diff.ts
- 回归测试:tests/diff.test.ts
- 项目说明:README.md
一句话总结:kordoc 的新旧对照表功能把「改了什么、改了哪里、改了多少」变成一次compare_documents调用的事,块级统计 + 表格单元格明细 + 跨格式兼容,公文审阅、版本审计、格式转换核验都能直接落地。
【免费下载链接】kordoc모두 파싱해버리겠다 — HWP·HWPX·PDF·Office 문서를 Markdown으로. 양식 자동 채우기와 신구대조를 갖춘 CLI·MCP 서버 | Convert Korean documents (HWP, HWPX, PDF, Office) to Markdown — CLI and MCP server with form filling and diff项目地址: https://gitcode.com/gh_mirrors/ko/kordoc
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考