一个基于 AST 的多级 Markdown 压缩工具,能够有效减少 Markdown 文本的字符数和 Token 消耗。
- 🎯 三级优化: O1 (规范化) → O2 (语义压缩) → O3 (内容提取)
- 🌳 AST 优先: 基于抽象语法树处理,不使用脆弱的正则表达式
- 🔌 插件化架构: 易于扩展和维护
- ⚡ 高性能: 支持批量处理和大型文档
- 📊 详细统计: 提供压缩率和性能指标
- 零语义损失,完全保留渲染效果
- 统一标题格式 (ATX 风格)
- 标准化列表标记、强调符号
- 去除多余空格和空行
- 表格格式优化
- 轻微语义损失,保留主要结构
- 标题级别重映射
- 移除所有格式标记 (粗体、斜体等)
- 删除水平线和不必要的空行
- 简化单行代码块
- 最大化压缩,转换为纯文本
- 完全剥离格式信息
- 线性化表格和列表
- 合并短列表项为段落
- 只保留核心内容
npm install md-compressergit clone <repository>
cd md-compresser
npm install
npm run build
npm link # 可选:全局安装 CLImd-compress [选项] <输入文件> [输出文件]# 基本压缩 - 输出到控制台
md-compress document.md
# 压缩到文件
md-compress document.md -o compressed.md
# 指定压缩级别
md-compress -l O2 document.md -o output.md
# 显示压缩统计
md-compress document.md -s
# 管道操作
cat input.md | md-compress -l O2
# 批量处理
for file in *.md; do
md-compress "$file" -l O2 -o "compressed-$file" -s
done| 选项 | 描述 | 默认值 |
|---|---|---|
-o, --output <文件> |
输出文件路径 | stdout |
-l, --level <级别> |
压缩级别 O1|O2|O3 | O1 |
-s, --stats |
显示压缩统计 | false |
-q, --quiet |
静默模式 | false |
-v, --verbose |
详细输出 | false |
-h, --help |
显示帮助信息 | - |
--version |
显示版本信息 | - |
✅ 压缩完成: input.md → output.md
📊 压缩统计:
原始长度: 1200 字符
压缩后: 680 字符
压缩率: 43.33%
节省字符: 520
耗时: 23ms
import { compress } from 'md-compresser';
const markdown = `
# **标题**
这是包含 **粗体** 和 *斜体* 的文本。
- 项目 1
- 项目 2
`;
// O1 级别优化
const resultO1 = await compress(markdown, { level: 'O1' });
console.log(resultO1.compressed);
// O2 级别优化
const resultO2 = await compress(markdown, { level: 'O2' });
console.log(resultO2.compressed);
// O3 级别优化
const resultO3 = await compress(markdown, { level: 'O3' });
console.log(resultO3.compressed);import { compressBatch } from 'md-compresser';
const markdowns = [
'# 文档 1\n内容...',
'# 文档 2\n内容...'
];
const results = await compressBatch(markdowns, { level: 'O2' });
results.forEach((result, index) => {
console.log(`文档 ${index + 1}:`, result.compressedLength, '字符');
});import { compareLevels } from 'md-compresser';
const comparison = await compareLevels(markdown);
console.log(comparison.levels);压缩单个 Markdown 文本。
参数:
markdown: string- 要压缩的 Markdown 文本options: CompressOptions- 压缩选项level: 'O1' | 'O2' | 'O3'- 优化级别
返回: Promise<CompressionResult>
批量压缩多个 Markdown 文本。
参数:
markdowns: string[]- Markdown 文本数组options: CompressOptions- 压缩选项
返回: Promise<CompressionResult[]>
比较所有优化级别的效果。
参数:
markdown: string- 要测试的 Markdown 文本
返回: Promise<ComparisonResult>
export type OptimizationLevel = 'O1' | 'O2' | 'O3';
export interface CompressOptions {
level: OptimizationLevel;
}
export interface CompressionResult {
original: string;
compressed: string;
level: OptimizationLevel;
originalLength: number;
compressedLength: number;
compressionRatio: number;
}npm run buildnpm test# 开发模式运行 CLI
npm run cli -- --help
npm run cli test-sample.md -s
# 构建后测试
node dist/cli.js --help
node dist/cli.js test-sample.md -l O2 -snpm run demo
# 交互式演示
npm run demo -- --interactivenpm run devsrc/
├── index.ts # 公共 API 导出
├── cli.ts # CLI 入口文件
├── compressor.ts # 核心压缩逻辑
├── types.ts # 类型定义
└── plugins/
├── o1-canonicalization.ts # O1 优化插件
├── o2-semantic-compression.ts # O2 优化插件
└── o3-content-extraction.ts # O3 优化插件
dist/ # 构建输出
├── cli.js # CLI 可执行文件
└── ...
test/
├── test.ts # 测试套件
└── test-sample.md # 测试样例
- TypeScript - 类型安全
- unified - 处理管道
- remark - Markdown 生态
- mdast - Markdown AST
- unist-util-visit - AST 遍历
欢迎提交 Issue 和 Pull Request!
- 🎉 初始版本发布
- ✅ 支持三级优化 (O1, O2, O3)
- ✅ 完整的 TypeScript 支持
- ✅ 批量处理功能
- ✅ 详细的压缩统计
- 🔧 CLI 工具 - 编译器级别的命令行接口
- 📊 性能优化 - 压缩率递增 O1<O2<O3
- 🎯 用户友好 - 完整的帮助和统计信息
ISC