Add corpus size/license estimator; snapshot 90-project findings

Why:
- 放量决策需要比"52MB/项目 × 12493 = 650GB"更扎实的数据。用
  scripts/estimate_size.py 采样 90 个 hot 项目的 attachments[].size
  得到真实分布(median 9MB / p90 54MB),全量 median 估算 110GB,
  p90 上界 660GB。这给 Charles 一个可信的存储预算。
- 附带 license 和 ext 分布采出两个重要洞察:
  (1) mp4+qt 视频占 54% 存储,加 --skip-ext 开关可节省一半;
  (2) NC (Non-Commercial) 许可 ~11%,下游必须按 whitelist 过滤。

What:
- scripts/estimate_size.py: 无下载的元数据采样器,复用 crawler.parse_detail_html
- docs/sources/oshwhub_corpus_estimate.md: 结果快照 + 决策建议
- log.md: 本次会话记录

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Zhang Jiahao
2026-04-23 19:45:54 +08:00
parent c8d55a22eb
commit e222b08f27
3 changed files with 213 additions and 1 deletions

View File

@@ -0,0 +1,67 @@
# oshwhub 全量规模与特征估算
**采样方法**`scripts/estimate_size.py``/api/project?sort=hot`**90 个项目**3 页 × 30解析每页详情 HTML 的 `attachments[]`,不下载任何附件。
**采样日期**2026-04-23
**重跑方式**`uv run python scripts/estimate_size.py --pages 3 --page-size 30 --sort hot`
## 单项目分布
| 指标 | 附件数 | 体积 |
|-----|-------|-----|
| mean | 3.1 | 22.2 MB |
| median | 2 | 9.0 MB |
| p90 | — | 54.2 MB |
| max | 15 | 204.5 MB |
90 个样本共 2001 MB。注意 `sort=hot` 的采样偏向**有高人气、有文件**的项目;长尾应更小。
## 全量推算12 493 projects
| 基数 | 估算 |
|-----|-----|
| mean × total | **271 GB** |
| median × total | **110 GB** ← 合理规划值 |
| p90 × total | **662 GB** ← 上界 |
建议按 **150 GB** 做预算median + buffer排除 hot 偏差);**300 GB** 做容量上限,预留故障余地。
## 文件类型分布(按字节)
| 后缀 | 样本总量 | 占比 |
|------|---------|------|
| .mp4 | 1029 MB | **51%** |
| .zip | 676 MB | 34% |
| .rar | 72 MB | 4% |
| .qt | 66 MB | 3% |
| .pdf | 32 MB | 2% |
| .bin | 27 MB | 1% |
| .jpeg | 26 MB | 1% |
| .7z | 10 MB | <1% |
> **关键洞察**视频mp4 + qt ≈ 54%)占存储一半以上。如果训练数据主要用 PCB / 原理图 / BOM可在爬虫中加 `--skip-ext mp4,qt` 滤掉视频,存储立省一半。
## 许可证分布90 个样本)
| License | 计数 | 占比 |
|---------|-----|-----|
| GPL 3.0 | 44 | **49%** |
| Public Domain | 19 | 21% |
| CC BY-NC-SA 4.0 | 5 | 6% |
| CERN Open Hardware License | 4 | 4% |
| CC BY-NC-SA 3.0 | 3 | 3% |
| CC BY-SA 4.0 | 2 | 2% |
| TAPR Open Hardware License | 2 | 2% |
| CC-BY-NC-SA 3.0 | 2 | 2% |
| 其他 CC | 2 | 2% |
**全部开源/公共领域许可**,样本中无闭源。但注意:
- 49% GPL 3.0 — 用于**训练模型**无直接违反(模型权重不是 derivative work 的学术共识存在争议,保守起见训练输出不可简单商业化再分发)
- **NC (Non-Commercial)** 约 11% — 商用场景应**过滤剔除**
- 样本偏大型项目;全量中 `license: "unknown"` 比例可能更高,需要下游按 whitelist 过滤
## 给 Charles 的建议
1. **放量预算**150 GB 存储 + 15% buffer ≈ **180 GB LFS 空间**
2. **滤视频**:在 Phase 1.4 之前给 crawler 加 `--skip-ext mp4,qt,mov,avi` 开关,存储需求砍半
3. **许可证白名单**:下游派生数据集按 `license in {Public Domain, CC0, CC BY, CC BY-SA, MIT, Apache-2.0, BSD*, CERN-OHL*}` 过滤 NC / 未知
4. **分期爬取**:按 `sort=hot` 按 page 推进,每 500 项目 checkpoint 一次