home / fault-atlas / probes

probes: 11

The exact question asked of a corpus, kept verbatim (code column): a Python regex on one document, a SPARQL query on a public endpoint, a shell request. result_count/result_of is the re-run figure on result_date; matches_excerpt says whether that figure is the one quoted in the observation (0 = differs, both kept).

This data as json

id form_id form_name file kind corpus_id written run result_count result_of result_date matches_excerpt note code
11 form-041 Truncated or unreadable documents probes/2026-08/line-041.py python corpus-europe-pmc-jats-2023-2026 2026-08-08 python3 tools/run_probe.py probes/2026-08/line-041.py <dir with the 272 .xml> 0 272 2026-09-09 1 Measured absent: the probe finds no carrier among the 272 files. An absence is a result, dated. """Fault Atlas probe — catalogue line 41 (form-041). Extracted verbatim from the August 2026 observation campaign (Loxyn SAS, Lyon). A probe answers one question on one JATS XML file: "is this fault here, and where?" It repairs nothing and decides nothing. Returns a list of excerpts, empty if absent. Run on the reproducible corpus (see corpora/europe-pmc-jats-2023-2026-272.json): python3 tools/run_probe.py probes/2026-08/line-041.py <dir with the 272 .xml> """ import re, collections, unicodedata SONDES = {} def sonde(ligne, nom): def deco(f): SONDES[ligne] = (nom, f); return f return deco # ── 41 · DOCUMENT TRONQUÉ : le texte intégral n'est pas là # ⚠️ 1re version RETIRÉE : « <body> de moins de 300 mots » sonnait 29 fois, TOUTES # dans la strate `retract`. Un avis de rétractation COURT n'est pas un document # tronqué — c'est un genre bref. Une sonde concentrée à 100 % sur une strate est # une alarme de méthode. Restent ici les seules marques de troncature RÉELLES : # corps absent, renvoi interne dont la cible manque, bloc déclaré indisponible. @sonde(41, "document tronqué (corps absent, cible interne manquante, bloc indisponible)") def d41(x): marques = [] if '<body' not in x: marques.append('AUCUN <body> — front-matter seul') ids = set(re.findall(r'\bid="([^"]+)"', x)) rids = set() for r in re.findall(r'<xref[^>]*\brid="([^"]+)"', x): rids.update(r.split()) pendants = sorted(rids - ids) if pendants: marques.append(f'renvoi interne SANS cible : {pendants[:3]}') if re.search(r'(?s)<table-wrap\b(?:(?!</table-wrap>).)*</table-wrap>', x): sans = [t for t in re.findall(r'(?s)<table-wrap\b.*?</table-wrap>', x) if '<table' not in t] if sans: marques.append('tableau livré sans contenu textuel') if re.search(r'(?i)\[(?:text|figure|image|table)s? (?:omitted|not available|unavailable)\]', x): marques.append('bloc déclaré manquant') return marques
Powered by Datasette · Queries took 1.38ms