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
@@ -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