Skip to content

vlln/markdown-compressor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Markdown 压缩器 (Markdown Compressor)

一个基于 AST 的多级 Markdown 压缩工具,能够有效减少 Markdown 文本的字符数和 Token 消耗。

特性

  • 🎯 三级优化: O1 (规范化) → O2 (语义压缩) → O3 (内容提取)
  • 🌳 AST 优先: 基于抽象语法树处理,不使用脆弱的正则表达式
  • 🔌 插件化架构: 易于扩展和维护
  • 高性能: 支持批量处理和大型文档
  • 📊 详细统计: 提供压缩率和性能指标

优化级别

O1: 规范化 (Canonicalization)

  • 零语义损失,完全保留渲染效果
  • 统一标题格式 (ATX 风格)
  • 标准化列表标记、强调符号
  • 去除多余空格和空行
  • 表格格式优化

O2: 语义压缩 (Semantic Compression)

  • 轻微语义损失,保留主要结构
  • 标题级别重映射
  • 移除所有格式标记 (粗体、斜体等)
  • 删除水平线和不必要的空行
  • 简化单行代码块

O3: 内容提取 (Content Extraction)

  • 最大化压缩,转换为纯文本
  • 完全剥离格式信息
  • 线性化表格和列表
  • 合并短列表项为段落
  • 只保留核心内容

安装

从 npm 安装

npm install md-compresser

从源码安装

git clone <repository>
cd md-compresser
npm install
npm run build
npm link  # 可选:全局安装 CLI

快速开始

CLI 使用 (推荐)

基本语法

md-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

CLI 选项

选项 描述 默认值
-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

编程接口 (API)

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);

API 参考

compress(markdown, options)

压缩单个 Markdown 文本。

参数:

  • markdown: string - 要压缩的 Markdown 文本
  • options: CompressOptions - 压缩选项
    • level: 'O1' | 'O2' | 'O3' - 优化级别

返回: Promise<CompressionResult>

compressBatch(markdowns, options)

批量压缩多个 Markdown 文本。

参数:

  • markdowns: string[] - Markdown 文本数组
  • options: CompressOptions - 压缩选项

返回: Promise<CompressionResult[]>

compareLevels(markdown)

比较所有优化级别的效果。

参数:

  • 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 build

测试

npm test

CLI 测试

# 开发模式运行 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 -s

演示

npm run demo
# 交互式演示
npm run demo -- --interactive

开发模式

npm run dev

项目结构

src/
├── 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!

更新日志

v1.0.0

  • 🎉 初始版本发布
  • ✅ 支持三级优化 (O1, O2, O3)
  • ✅ 完整的 TypeScript 支持
  • ✅ 批量处理功能
  • ✅ 详细的压缩统计
  • 🔧 CLI 工具 - 编译器级别的命令行接口
  • 📊 性能优化 - 压缩率递增 O1<O2<O3
  • 🎯 用户友好 - 完整的帮助和统计信息

许可证

ISC

About

一个基于 AST 的多级 Markdown 压缩工具,能够有效减少 Markdown 文本的字符数和 Token 消耗。为大规模 AI Agent 通信节约成本。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors