semantic-search / load_data.py
varteka-2's picture
Update load_data.py
074292c verified
Raw
History Blame Contribute Delete
1.99 kB
"""Step 1: load a REAL Amazon product catalog -> docs.json.
Tries several public datasets, auto-detects title/description columns,
and streams just N rows (no giant download). Fully variety-rich data.
"""
import json
from datasets import load_dataset
N = 10000
CANDIDATES = [
"ckandemir/amazon-products",
"cvnberk/amazon-products",
"bprateek/amazon_product_description",
]
TEXT_HINTS = ["title", "product", "name", "description", "about", "feature", "text"]
def pick_fields(example):
keys = list(example.keys())
def find(hints):
for k in keys:
if any(h in k.lower() for h in hints):
return k
return None
title = find(["title", "product name", "name"])
desc = find(["description", "about", "feature"])
chosen = [c for c in [title, desc] if c]
if not chosen:
chosen = [k for k in keys if any(h in k.lower() for h in TEXT_HINTS)]
return chosen
ds = None
for name in CANDIDATES:
try:
print("Trying", name, "...")
ds = load_dataset(name, split="train", streaming=True)
print("Loaded", name)
break
except Exception as e:
print(" failed:", e)
if ds is None:
raise SystemExit("Could not load any dataset. Check internet / datasets version.")
docs, seen = [], set()
fields = None
for row in ds:
if fields is None:
fields = pick_fields(row)
print("Using fields:", fields)
parts = []
for f in fields:
v = row.get(f)
if isinstance(v, str) and v.strip():
parts.append(v.strip())
elif isinstance(v, list):
parts.append(" ".join(str(x) for x in v if x))
text = " ".join((" — ".join(parts)).split())
if len(text) < 20 or text in seen:
continue
seen.add(text)
docs.append(text[:500])
if len(docs) >= N:
break
json.dump(docs, open("docs.json", "w"))
print(f"Saved {len(docs)} product docs -> docs.json")
print("Sample:", docs[0][:160])