Mappa figure-pagine: link mancanti, Fig. 41 in dpp-1, sezione 'Pagine che la usano' nelle note e controlli 9-10 in lint
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
aa9b943450
commit
eb672dfcd8
105 files changed
+361
-20
No files matched your search
@@ -9,6 +9,26 @@ out = root / "wiki/figures"
|
||||
out.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
|
||||
# --- pagine della wiki che usano ciascuna figura (link [[fig-...]] o embed del file), per la navigazione inversa ---
|
||||
import re as _re0
|
||||
_file2id = {pn["file"][:-4]: f["id"] for k in ("figures",) for f in cat[k] for pn in f["panels"]}
|
||||
_file2id.update({pn["file"][:-4]: f["id"] for f in cat.get("riassunto", {}).get("figures", []) for pn in f["panels"]})
|
||||
used_by = {}
|
||||
for _p in sorted((root / "wiki").rglob("*.md")):
|
||||
if "figures" in _p.parts or _p.name in ("figure-indice.md", "bibliografia.md"):
|
||||
continue
|
||||
_t = _p.read_text(encoding="utf8").split("---", 2)[-1]
|
||||
_ids = set(_re0.findall(r"\[\[((?:ris-)?fig-[\w-]+)", _t))
|
||||
_ids |= {_file2id[h] for h in _re0.findall(r"!\[\[immagini/([0-9a-f]{64})", _t) if h in _file2id}
|
||||
for _i in _ids:
|
||||
used_by.setdefault(_i, set()).add(_p.stem)
|
||||
|
||||
|
||||
def usage(fid):
|
||||
pages = sorted(used_by.get(fid, ()))
|
||||
return ["## Pagine che la usano", " · ".join(f"[[{x}]]" for x in pages) if pages else "nessuna", ""]
|
||||
|
||||
|
||||
def q(s):
|
||||
return json.dumps(str(s), ensure_ascii=False)
|
||||
|
||||
@@ -65,6 +85,7 @@ for f in cat["figures"]:
|
||||
body += ["## Da verificare", qual["review_notes"], ""]
|
||||
if v.get("issues"):
|
||||
body += ["Esito revisione indipendente: " + "; ".join(v["issues"]), ""]
|
||||
body += usage(f["id"])
|
||||
body += ["## Collegamenti", "- [[tesi]]", ""]
|
||||
(out / f"{f['id']}.md").write_text("\n".join(fm + body), encoding="utf8")
|
||||
|
||||
@@ -112,6 +133,7 @@ for f in ris:
|
||||
body += [f"- [[{e['id']}]] — {e['relation']} (verifica: {e['verified']})" for e in f["thesis_equivalents"]] + [""]
|
||||
if qual.get("review_notes"):
|
||||
body += ["## Da verificare", qual["review_notes"], ""]
|
||||
body += usage(f["id"])
|
||||
body += ["## Collegamenti", "- [[riassunto-tesi]] · [[riassunto-vs-tesi]]", ""]
|
||||
(out / f"{f['id']}.md").write_text("\n".join(fm + body), encoding="utf8")
|
||||
|
||||
|
||||
@@ -87,3 +87,38 @@ for p in pages:
|
||||
cat = json.loads((root / "raw/immagini.json").read_text(encoding="utf8"))
|
||||
c = Counter(x for f in cat["figures"] for x in f.get("concepts", []))
|
||||
print("8 slug in >=2 figure:", [(k, v) for k, v in c.most_common() if v >= 2])
|
||||
|
||||
# 9 figure citate per numero ("Fig. N") senza wikilink [[fig-...]] né embed del file nella stessa pagina
|
||||
# (escluse le pagine analyses/ e riassunto-tesi, che usano numerazioni di altri documenti o citano per ragioni diverse)
|
||||
n2f = {f["number"]: f for f in cat["figures"] if f["number"]}
|
||||
FIGLINK = re.compile(r"\[\[((?:ris-)?fig-[\w-]+)")
|
||||
EMB = re.compile(r"!\[\[immagini/([0-9a-f]{64})")
|
||||
nav = {"tesi", "campioni", "dati", "glossario", "overview", "tabelle-indice", "percorso-sintetico", "riassunto-tesi"}
|
||||
for p in pages:
|
||||
if "analyses" in p.parts or p.stem == "riassunto-tesi":
|
||||
continue
|
||||
body = re.sub(r"^---\n.*?\n---\n", "", p.read_text(encoding="utf8"), flags=re.S)
|
||||
ids, hs = set(FIGLINK.findall(body)), set(EMB.findall(body))
|
||||
miss = set()
|
||||
for m in re.finditer(r"Figg?\.\s*(\d+)(?:\s*[-–]\s*(\d+))?", re.sub(r"\[\[[^\]]*\]\]", "", body)):
|
||||
for n in range(int(m.group(1)), int(m.group(2) or m.group(1)) + 1):
|
||||
f = n2f.get(n)
|
||||
if f and f["id"] not in ids and not {x["file"][:-4] for x in f["panels"]} & hs:
|
||||
miss.add(n)
|
||||
if miss:
|
||||
print("9 figure citate senza link né embed:", p.name, sorted(miss))
|
||||
|
||||
# 10 figure mai collegate da una pagina tematica (solo da navigazione o da analisi)
|
||||
topical = set()
|
||||
for p in pages:
|
||||
if p.stem in nav or "analyses" in p.parts:
|
||||
continue
|
||||
t = p.read_text(encoding="utf8")
|
||||
topical |= set(FIGLINK.findall(t))
|
||||
topical |= {x for x in (pn["file"][:-4] for f in cat["figures"] + cat.get("riassunto", {}).get("figures", []) for pn in f["panels"]) if x in set(EMB.findall(t))}
|
||||
ids_all = {f["id"] for f in cat["figures"]} | {f["id"] for f in cat.get("riassunto", {}).get("figures", [])}
|
||||
file2id = {pn["file"][:-4]: f["id"] for f in cat["figures"] + cat.get("riassunto", {}).get("figures", []) for pn in f["panels"]}
|
||||
topical_ids = {file2id.get(x, x) for x in topical}
|
||||
orph = sorted(i for i in ids_all - topical_ids if not i.startswith("ris-fig"))
|
||||
if orph:
|
||||
print("10 figure della tesi senza pagina tematica:", orph)
|
||||
Reference in new issue
Block a user