SPB Git

spb/wp44_uqo

Public
1.2 KB · 18 lines python
1#!/usr/bin/env python32"""Flatten the OpenAlex topics snapshot (4,516 topics) into a CSV used by the taxonomy."""3import csv, glob, gzip, json, sys4out, src = sys.argv[1], sys.argv[2]5rows = []6for f in sorted(glob.glob(src + "/*.gz")):7    for line in gzip.open(f, "rt"):8        t = json.loads(line)9        kw = [k if isinstance(k, str) else (k.get("display_name") or k.get("keyword") or "") for k in (t.get("keywords") or [])]10        rows.append(dict(topic_id=t["id"].rsplit("/", 1)[1], display_name=t["display_name"], subfield_id=t["subfield"]["id"].rsplit("/", 1)[1],11                         subfield=t["subfield"]["display_name"], field_id=t["field"]["id"].rsplit("/", 1)[1], field=t["field"]["display_name"],12                         domain=t["domain"]["display_name"], works_count=t.get("works_count"), cited_by_count=t.get("cited_by_count"),13                         keywords="; ".join(kw), description=(t.get("description") or "").replace("\n", " ")))14rows.sort(key=lambda r: (int(r["field_id"]), int(r["subfield_id"]), int(r["topic_id"][1:])))15with open(out, "w", newline="") as fh:16    w = csv.DictWriter(fh, fieldnames=list(rows[0].keys())); w.writeheader(); w.writerows(rows)17print(len(rows), "topics;", sum(1 for r in rows if r["field_id"] == "17"), "in CS")18
Files · 4e6cbe5ed1dd2a34a387c52896b7a93fdcdf1f94
Menu

Theme