"""Verifica citatele dintr-o recolta: fiecare `(.txt:)` trebuie sa trimita la o linie care exista in transcriere. Un citat cu linia gresita e mai rau decat lipsa lui - modelul care recolteaza inventeaza numere plauzibile. python3 check_harvest_citations.py harvest/2026-06-11.md ... python3 check_harvest_citations.py --selftest """ import re import sys from pathlib import Path CIT = re.compile(r"(\w+\.txt):(\d+)") TRANSCRIPTS = Path("transcripts") def check(md: Path) -> list[str]: rele = [] for name, lineno in CIT.findall(md.read_text(encoding="utf-8")): hits = list(TRANSCRIPTS.rglob(name)) if not hits: rele.append(f"{md.name}: transcrierea {name} nu exista") continue n = len(hits[0].read_text(encoding="utf-8").splitlines()) if not 1 <= int(lineno) <= n: rele.append(f"{md.name}: {name}:{lineno} — fisierul are {n} linii") return rele def selftest(): import tempfile with tempfile.TemporaryDirectory() as d: t = Path(d) / "transcripts" / "M" t.mkdir(parents=True) (t / "01_x.txt").write_text("a\nb\nc\n") md = Path(d) / "r.md" md.write_text("ok (01_x.txt:2), peste (01_x.txt:99), lipsa (02_y.txt:1)") global TRANSCRIPTS TRANSCRIPTS = Path(d) / "transcripts" rele = check(md) assert len(rele) == 2, rele assert "99" in rele[0] and "02_y.txt" in rele[1], rele print("selftest ok") if __name__ == "__main__": if "--selftest" in sys.argv: selftest() sys.exit(0) rele = [p for f in sys.argv[1:] for p in check(Path(f))] print("\n".join(rele) if rele else f"ok — {len(sys.argv)-1} fisiere, toate citatele trimit la linii reale") sys.exit(1 if rele else 0)