Remote-Sensing Dataset Platform Audit
Turn a curated dataset markdown list into a rigorously verified, analyzable spreadsheet of where each dataset is really hosted.
Golden rule: Download_Link = the URL where the dataset FILES physically live
and can be fetched (a HuggingFace dataset page, a Google Drive folder, a Baidu
NetDisk share, a Zenodo record, …). A GitHub code repository counts as the
platform only when the data files are committed inside the repo or attached
to a Release. If the repo README points elsewhere (Drive / HF / NetDisk / …),
that external location is the platform; keep the repo URL in Comments as
Project: <url>.
Inputs & prerequisites
- The source list: a cloned repo or a README.md containing dataset tables.
- Network access (WebFetch / WebSearch) for verifying links.
- Optional: a ModelScope access token (
ms-...) to check ModelScope mirrors via the API. Ask the user for it if ModelScope coverage is requested. - Python 3 with only the standard library (all helper scripts are stdlib-only).
Output column schema
Every CSV uses exactly these columns, in order:
Name, Year, Venue, Cls1, Cls2, Platform1, Download_Link1,
Platform2, Download_Link2, Needs_Application, Comments, Error, ModelScope_Mirror
- Cls1: top-level class —
Comprehensive Data,Comprehensive Benchmarks,Task-specific Data,Meta Data. - Cls2: sub-class. When a top-level class has no sub-headers, set
Cls2 = Cls1. - Platform1/Download_Link1: primary real data host + specific URL.
- Platform2/Download_Link2: secondary host (many datasets mirror on a
NetDisk). If more than two hosts exist, describe the extras in
Comments. - Needs_Application:
Yesif the primary/official route requires a form / registration / email / EULA; elseNo. If an open author-hosted mirror exists, prefer it as Platform1 and markNo. - Comments:
Project: <repo/paper url>plus any notes (extra platforms, access codes/passwords, subset caveats). - Error: broken/placeholder/wrong links found in the source + the corrected link, or "not yet released" status.
- ModelScope_Mirror: the ModelScope dataset URL if a genuine mirror exists,
else
No.
Workflow
Copy this checklist and track progress:
- [ ] 1. Parse README tables into structured records
- [ ] 2. Split by sub-category into batch files
- [ ] 3. Investigate real download platform per dataset (parallel sub-agents)
- [ ] 4. Resolve application-gated datasets to their real host
- [ ] 5. Check ModelScope mirrors via API
- [ ] 6. Assemble per-category + merged CSVs
- [ ] 7. Run platform-share statistics (by year, by venue)
- [ ] 8. Verify (counts, false-positive review, dead-link sanity)
Step 1 — Parse the README
Run scripts/parse_readme.py <README.md>. It walks ## (Cls1) and ###
(Cls2) headers, then parses each markdown table row, extracting Year, Venue,
Country/Keywords, Name (+ paper link), and the raw Download cell. It emits
parsed_datasets.json.
Pitfall: Change Detection contains the substring Detection — test the more
specific sub-header first when mapping Cls2.
Step 2 — Batch by sub-category
Group records by Cls2 and write one batch_<Cls2>.json per group. This keeps
each sub-agent's workload focused and context small.
Step 3 — Investigate the real platform (use sub-agents in parallel)
Launch one general-purpose sub-agent per 2 batches (≈5 agents total for a
~270-entry list). Each agent, for every dataset:
- If the raw Download cell is already a direct platform URL
(
huggingface.co/datasets,drive.google.com,pan.baidu.com,kaggle.com,zenodo.org,opendatalab.com,modelscope.cn, …) → use it directly as Download_Link1. - If it is a GitHub repo, WebFetch the repo README and find where the data
actually downloads from. Repo URL →
Comments: Project: ...; the real host becomes Platform1. Only keep GitHub as Platform1 when data files live in the repo/Release. - If it is
N/A/NaN/empty, WebFetch the paper link for a data-availability statement; WebSearch as a fallback. - If a link 404s / is a placeholder (e.g.
YourOrg) / is a shields.io badge URL captured by mistake / has a malformed suffix → record the problem and the corrected link inError.
Platform-name normalization (use these canonical labels): HuggingFace, Google Drive, Baidu NetDisk, Baidu AI Studio, Kaggle, Zenodo, OpenDataLab, ModelScope, OneDrive/SharePoint, IEEE DataPort, GitHub Pages, Project Website, University Website, plus long-tail ones as needed.
Each agent writes results_<batch>.json with the full column set.
Step 4 — Resolve application-gated datasets
For any dataset behind a form/registration/email, still try to find the real storage:
- Author-hosted open mirror exists (HuggingFace / OpenDataLab) → use it as
Platform1,
Needs_Application = No. - Only an official gated route + a third-party mirror → keep official as
Platform1, surface the mirror in Platform2/Comments,
Needs_Application = Yes. - Truly gate-only (no discoverable host) →
Platform1 = Application Requiredwith the form/email as the link,Needs_Application = Yes.
Step 5 — Check ModelScope mirrors
Use the search API (see references below). For each dataset:
- First reuse any
modelscope.cnURL already present in the collected fields. - Otherwise query by cleaned name and match on the normalized repo name (lowercase, strip non-alphanumerics). Require exact-normalized equality, or containment when the token length ≥ 5.
- Manually review every fuzzy hit — this is where false positives hide (e.g. a general "GAIA" agent benchmark ≠ the RS "GAIA"; "laser" ≠ "LaSeRS"; a text "choice" dataset ≠ the RS "CHOICE"; a base "LEVIR-CD" ≠ "LEVIR-CD+"; a small subset or a re-processed derivative is not a full mirror).
scripts/modelscope_search.py implements the working endpoint and matching.
Step 6 — Assemble CSVs
Merge all results_*.json, sort each group by Year then Name, and write one CSV
per Cls2 plus one merged ALL_*.csv (all rows, same schema). Use
utf-8-sig encoding so Excel opens Chinese/links cleanly.
Step 7 — Statistics
Compute platform-share distributions: overall Platform1, Platform1 by Year, and
Platform1 by Venue (report the top venues). Save analysis_summary.json and a
short markdown report. Typical finding to sanity-check against: HuggingFace share
rises steeply after ~2024; NetDisk/Drive dominate earlier years; AI venues favor
HuggingFace while domain journals stay more fragmented.
Step 8 — Verify
- Row counts per category match the parse.
- Re-review all fuzzy ModelScope hits and any Platform1 that is still a bare code repo.
- Spot-check a sample of "dead link" flags (some fetch failures are transient; do not over-flag canonical institutional pages).
Utility scripts
scripts/parse_readme.py— parse README tables →parsed_datasets.json.python scripts/parse_readme.py path/to/README.mdscripts/modelscope_search.py— search ModelScope for a dataset name.MODELSCOPE_API_TOKEN=ms-xxx python scripts/modelscope_search.py "Git-10M"
Pitfalls
- Do NOT equate a GitHub star badge / project page with the data host.
- Watch normalization collisions (
+, spaces,-stripped) that merge distinct datasets (LEVIR-CDvsLEVIR-CD+). - Placeholder links (
YourOrg), shields.io badge URLs, and.code/.gitsuffixes are common source-list bugs — record them inError. - A subset or a re-processed variant on ModelScope is not a full mirror; mark conservatively and note it.
- ModelScope search API:
PUT/POSTondolphin/datasetsreturn 404; only theGET .../api/v1/dolphin/datasets?Query=<kw>form accepts free-text search.
微信扫一扫