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:
davideandClaude Sonnet 5.5 committed 2026-10-20 13:59:21 +02:00
1 parent aa9b943450
commit eb672dfcd8
105 files changed
+361 -20

No files matched your search

+35
View File
@@ -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)