返回 Skill 列表
extension
分类: 数据与分析无需 API Key

数据清洗+提质+标签+出图

data-curator

person作者: user_1793b15chubcommunity

DataCurator — 本地数据清洗·提质·标签工具包

纯本地运行,零 API Token;三层流水线剔除低俗/重复/错别字/逻辑混乱数据, 用轻量打分器筛出高信息密度语料,并自动贴标签分类管理。

为什么不用纯 Skill?

| 维度 | Skill | 本地脚本(本工具) | |------|-------|------------------| | Token 成本 | 每次调用都烧 | 0(全本地) | | 批量能力 | 受上下文限制 | 百万级 | | 打分精度 | LLM 准但贵 | 小模型/统计够用且免费 | | 复用性 | 进会话才有 | 随时跑 |

结论:核心做成 Python 工具包,Skill 仅作可选调用入口(见下文方式 B)。

✨ v0.2.0 新特性

  • CLI 美化:进度条 / 结果面板 / 指标表格使用 Rich 渲染(缺 rich 自动降级纯文本);Windows 终端中文不再乱码。
  • 看板暗色模式:右上角 🌙 按钮一键切换深/浅色,适配暗色 IDE。
  • 预览全文 tooltip:看板预览表鼠标悬停显示该条文本完整内容(不再截断 120 字)。
  • 打分器去耦合typo_signal 改为 score(text, typo_signal=...) 参数传入,移除跨层实例属性突变(修复非线程安全隐患)。
  • completeness 维度重做:旧公式对正常文本恒为 0.925(纯噪声),新公式基于停用词密度+标点健康度+长度区间,对灌水/无标点长文能有效区分。
  • Agent 无关 SKILL.md:自带通用 SKILL.mdagent_agnostic=true),任何能执行 shell 的 agent(WorkBuddy / 云端 agent / CI / 手动)用同一套 CLI 即可调用,不绑定任何私有协议。

架构

原始语料 → [L1 清洗] → [L2 打分] → [L3 标签] → 优质语料库
          零Token      零Token*      零Token
  • L1 清洗:SimHash 去重 / 错别字检测 / 低俗过滤 / 格式规范化
  • L2 打分:纯统计特征(默认,零依赖)或 DistilBERT-tiny(可选)
  • L3 标签:主题分类 / 难度等级 / 自定义标签,存 SQLite + JSON

安装

pip install -e .              # 基础版(统计打分,约 5MB 依赖)
pip install -e ".[model]"     # 额外启用模型打分器(~500MB)

三种使用方式

A. CLI 直接运行(推荐·批量·0 Token)

data-curator run \
  --input ./sample_data/raw_sample.jsonl \
  --output ./output/ \
  --config config.example.yaml

可选参数:--no-excel(不导出 xlsx)· --no-dashboard(不生成看板)· --min-score N(覆盖阈值)· --db path(落 SQLite)· --verbose(打印逐条处理进度)

安装后也可用控制台脚本 data-curator run ...;未安装时直接用 python -m data_curator.cli run ...

B. Skill 入口(可选·~500 Token/次调度)

本仓库自带 SKILL.mdagent_agnostic=true不绑定 WorkBuddy 或任何 agent 平台)。 任何能执行 shell 命令的 agent 都按同一条 CLI 命令调用,例如 WorkBuddy 中通过 @skill:data-curator 触发后落到的就是上面的 run 子命令:

@skill:data-curator --input ./raw/ --output ./clean/ --min-score 60

SKILL.md 末尾另附「如何注册到 WorkBuddy」的可选步骤(不影响功能,云端 agent 无需该步骤)。

C. Python API 嵌入(集成到其他项目·0 Token)

from data_curator import Pipeline

pipe = Pipeline.from_config("config.example.yaml")
results = pipe.run([{"text": "高信息密度的优质语料..."}])

for r in results.kept:
    print(r.text, r.score, r.tags)

配置(config.example.yaml)

所有阈值 / 词库 / 标签体系均在 YAML 中可调,无需改代码:

clean:
  min_length: 10          # 低于此字符数直接丢弃
  max_length: 5000        # 高于此字符数截断或丢弃
  dedup_threshold: 3      # SimHash 汉明距离阈值(越小越严格)
  profanity_action: "remove"  # remove | flag
score:
  mode: "stat"            # stat(默认)| model
  min_score: 60           # 低于此分丢弃
  weights:                # 统计维度权重
    info_density: 0.4
    coherence: 0.3
    completeness: 0.3
tag:
  difficulty_levels: ["L1入门", "L2进阶", "L3专业", "L4专家"]
  custom_labels: []       # 用户自定义标签规则

通用标签体系

默认内置一套通用标签(详见 data_curator/taggers/default_tags.yaml):

| 大类 | 示例标签 | |------|---------| | 主题 | 科技/商业/教育/文学/生活/医疗/法律/其他 | | 文体 | 叙事/说明/议论/对话/列表/代码 | | 难度 | L1入门 / L2进阶 / L3专业 / L4专家 | | 质量信号 | 高信息密度/逻辑清晰/含实例/含数据 |

标签可通过 YAML 自由扩展,支持关键词映射与正则规则。

Token 成本实测

| 场景 | Token | |------|-------| | 1万条语料全流水线(CLI) | 0 | | Skill 调度一次(仅返回摘要) | ~500 |

输出产物

--output 目录下生成:

| 文件 | 说明 | |------|------| | curated.jsonl | 优质语料(text/score/维度分/tags/meta),供二次处理 | | curated.csv | 同上,CSV 格式(UTF-8-BOM,Excel 直接打开中文不乱码) | | curated.xlsx | 同上,Excel 格式(需 pandas+openpyxl) | | dropped.jsonl / .csv / .xlsx | 被丢弃的语料及原因(duplicate/profanity/low_score/length) | | dashboard.html | 标签可视化看板(交互版):概览卡片 + 标签分布(可点击筛选)+ 质量分直方图(阈值线)+ 丢弃原因 + 预览表(离线自包含,双击浏览器打开) | | report.json / report.md | 机器/人类可读的统计报告 |

看板为纯手写 SVG + 原生 JS,无 CDN 依赖,离线可用;中文靠浏览器字体正常显示。交互能力:① 标签条可点击筛选(多选取并集,再点取消,顶部显示已选标签可单独移除);② 分数阈值滑动条,与「当前显示条数 / 占比 / 平均质量分」实时卡、标签图、直方图(红虚线标记当前阈值)、预览表实时联动;③ 一键「重置筛选」;④ 右上角 🌙 按钮切换暗色模式;⑤ 预览表行文本悬停显示全文(tooltip 不再截断 120 字)。阈值滑动条默认值为流水线 min_score

License

MIT