project-manara-annotate / deployment /fetch_datasets.py
agenthinkmesh's picture
Upload project files
e7919f8 verified
Raw History Blame Contribute Delete
6.49 kB
"""
Manara-Annotate: Arabic Dataset Fetching & Cataloging Script
Phase 2 β€” Identify and fetch public Arabic/GCC dialect datasets
"""
import os
import json
import csv
from pathlib import Path
from datasets import load_dataset
DATA_DIR = Path("/home/ubuntu/manara-annotate/data/raw")
DATA_DIR.mkdir(parents=True, exist_ok=True)
catalog = []
# ─────────────────────────────────────────────
# 1. ArSarcasm-v2 (Arabic Sarcasm Detection)
# ─────────────────────────────────────────────
print("=" * 60)
print("[1/3] Fetching ArSarcasm-v2 ...")
try:
ds_sarcasm = load_dataset("iabufarha/ar_sarcasm", trust_remote_code=True)
train_split = ds_sarcasm["train"]
test_split = ds_sarcasm["test"]
# Save samples
sarcasm_path = DATA_DIR / "arsarcasm_train.jsonl"
with open(sarcasm_path, "w", encoding="utf-8") as f:
for row in train_split:
f.write(json.dumps(row, ensure_ascii=False) + "\n")
sarcasm_test_path = DATA_DIR / "arsarcasm_test.jsonl"
with open(sarcasm_test_path, "w", encoding="utf-8") as f:
for row in test_split:
f.write(json.dumps(row, ensure_ascii=False) + "\n")
# Show sample
print(f" Train samples : {len(train_split)}")
print(f" Test samples : {len(test_split)}")
print(f" Columns : {train_split.column_names}")
print(f" Sample row : {train_split[0]}")
catalog.append({
"name": "ArSarcasm-v1",
"hf_id": "iabufarha/ar_sarcasm",
"task": "Sarcasm Detection / Sentiment",
"language": "Arabic (MSA + Dialectal)",
"train_size": len(train_split),
"test_size": len(test_split),
"columns": train_split.column_names,
"local_path": str(sarcasm_path),
"relevance": "Primary seed for sarcasm + sentiment labeling tasks"
})
print(" [OK] ArSarcasm saved.")
except Exception as e:
print(f" [ERROR] ArSarcasm: {e}")
# ─────────────────────────────────────────────
# 2. QADI β€” Arabic Dialect Identification
# ─────────────────────────────────────────────
print("\n[2/3] Fetching QADI (Arabic Dialect Identification) ...")
try:
ds_qadi = load_dataset("qcri/qadi", trust_remote_code=True)
qadi_split = ds_qadi["train"]
qadi_path = DATA_DIR / "qadi_train.jsonl"
with open(qadi_path, "w", encoding="utf-8") as f:
for row in qadi_split:
f.write(json.dumps(row, ensure_ascii=False) + "\n")
print(f" Train samples : {len(qadi_split)}")
print(f" Columns : {qadi_split.column_names}")
print(f" Sample row : {qadi_split[0]}")
catalog.append({
"name": "QADI",
"hf_id": "qcri/qadi",
"task": "Dialect Identification (18 country-level Arabic dialects)",
"language": "Arabic Dialectal (incl. Kuwaiti/Gulf)",
"train_size": len(qadi_split),
"test_size": 0,
"columns": qadi_split.column_names,
"local_path": str(qadi_path),
"relevance": "Primary seed for Kuwaiti vs MSA dialect detection"
})
print(" [OK] QADI saved.")
except Exception as e:
print(f" [ERROR] QADI: {e}")
# Fallback: try alternative dataset ID
try:
ds_qadi = load_dataset("arbml/qadi", trust_remote_code=True)
qadi_split = list(ds_qadi.values())[0]
qadi_path = DATA_DIR / "qadi_train.jsonl"
with open(qadi_path, "w", encoding="utf-8") as f:
for row in qadi_split:
f.write(json.dumps(row, ensure_ascii=False) + "\n")
print(f" [OK] QADI (arbml) saved. Samples: {len(qadi_split)}")
catalog.append({
"name": "QADI (arbml)",
"hf_id": "arbml/qadi",
"task": "Dialect Identification",
"language": "Arabic Dialectal",
"train_size": len(qadi_split),
"test_size": 0,
"columns": list(qadi_split.features.keys()) if hasattr(qadi_split, 'features') else [],
"local_path": str(qadi_path),
"relevance": "Dialect detection seed data"
})
except Exception as e2:
print(f" [ERROR] QADI fallback: {e2}")
# ─────────────────────────────────────────────
# 3. Arabic Sentiment (ASTD / LABR / SemEval)
# ─────────────────────────────────────────────
print("\n[3/3] Fetching Arabic Sentiment / NER datasets ...")
try:
ds_sent = load_dataset("arbml/ASTD", trust_remote_code=True)
sent_split = list(ds_sent.values())[0]
sent_path = DATA_DIR / "astd_sentiment.jsonl"
with open(sent_path, "w", encoding="utf-8") as f:
for row in sent_split:
f.write(json.dumps(row, ensure_ascii=False) + "\n")
print(f" Samples : {len(sent_split)}")
print(f" Columns : {sent_split.column_names}")
print(f" Sample : {sent_split[0]}")
catalog.append({
"name": "ASTD (Arabic Sentiment Tweets Dataset)",
"hf_id": "arbml/ASTD",
"task": "Sentiment Analysis",
"language": "Arabic (MSA + Egyptian/Gulf)",
"train_size": len(sent_split),
"test_size": 0,
"columns": sent_split.column_names,
"local_path": str(sent_path),
"relevance": "Sentiment nuance labeling; Khaleeji sarcasm baseline"
})
print(" [OK] ASTD saved.")
except Exception as e:
print(f" [ERROR] ASTD: {e}")
# ─────────────────────────────────────────────
# Save catalog
# ─────────────────────────────────────────────
catalog_path = DATA_DIR / "dataset_catalog.json"
with open(catalog_path, "w", encoding="utf-8") as f:
json.dump(catalog, f, ensure_ascii=False, indent=2)
print("\n" + "=" * 60)
print(f"Dataset catalog saved to: {catalog_path}")
print(f"Total datasets cataloged: {len(catalog)}")
for d in catalog:
print(f" - {d['name']}: {d.get('train_size', '?')} train samples | Task: {d['task']}")