from dataclasses import dataclass, field
from typing import Optional
@dataclass(frozen=True)
class Enonce:
"""Un enonce date : instantiation d'une proposition, portant ses relations."""
jour: int
prop: str
acte: str # "assertif" ou "question"
relations: tuple = () # couples (scheme, prop_cible), scheme in {"RA", "CA"}
# --- Periode t : jours 1-30 (30 enonces, deux moities de 15) ---
corpus_t = [
# premiere moitie (jours 1-15)
Enonce(1, "p1", "assertif"),
Enonce(2, "p2", "assertif", (("CA", "p1"),)),
Enonce(3, "p3", "assertif", (("CA", "p2"),)),
Enonce(4, "p4", "assertif", (("CA", "p3"),)),
Enonce(5, "p5", "assertif", (("RA", "p4"),)),
Enonce(6, "p6", "assertif"),
Enonce(7, "p7", "assertif", (("CA", "p6"),)),
Enonce(8, "p8", "assertif", (("CA", "p7"),)),
Enonce(9, "p9", "assertif", (("CA", "p8"),)),
Enonce(10, "p11", "assertif", (("CA", "p6"),)),
Enonce(11, "p10", "assertif", (("RA", "p9"),)),
Enonce(12, "p13", "question"), # exclu par C1 (non assertif)
Enonce(13, "p18", "assertif", (("CA", "p1"),)), # attaquant ephemere : non re-entendu ensuite
Enonce(14, "p12", "assertif", (("CA", "p9"),)),
Enonce(15, "p1", "assertif"),
# seconde moitie (jours 16-30)
Enonce(16, "p2", "assertif", (("CA", "p1"),)),
Enonce(17, "p3", "assertif", (("CA", "p2"),)),
Enonce(18, "p7", "assertif", (("CA", "p6"),)),
Enonce(19, "p8", "assertif", (("CA", "p7"),)),
Enonce(20, "p12", "assertif", (("CA", "p9"),)),
Enonce(21, "p11", "assertif", (("CA", "p6"),)),
Enonce(22, "p4", "assertif", (("CA", "p3"),)),
Enonce(23, "p5", "assertif", (("RA", "p4"),)),
Enonce(24, "p14", "assertif"), # exclu par C3 (aucune relation)
Enonce(25, "p9", "assertif", (("CA", "p8"),)),
Enonce(26, "p6", "assertif"),
Enonce(27, "p10", "assertif", (("RA", "p9"),)),
Enonce(28, "p12", "assertif", (("CA", "p9"),)),
Enonce(29, "p1", "assertif"),
Enonce(30, "p13", "question"), # re-exclu par C1
]
# --- Periode t+1 : jours 31-60 (16 enonces) ---
corpus_t1 = [
Enonce(31, "p15", "assertif", (("CA", "p12"),)), # nouvelle attaque
Enonce(32, "p16", "assertif", (("CA", "p11"),)), # nouvelle attaque
Enonce(33, "p2", "assertif", (("CA", "p1"),)),
Enonce(34, "p3", "assertif", (("CA", "p2"),)),
Enonce(35, "p4", "assertif", (("CA", "p3"),)),
Enonce(36, "p7", "assertif", (("CA", "p6"),)),
Enonce(37, "p8", "assertif", (("CA", "p7"),)),
Enonce(38, "p9", "assertif", (("CA", "p8"),)),
Enonce(39, "p11", "assertif", (("CA", "p6"),)),
Enonce(40, "p12", "assertif", (("CA", "p9"),)),
Enonce(41, "p5", "assertif", (("RA", "p4"),)),
Enonce(42, "p10", "assertif", (("RA", "p9"),)),
Enonce(43, "p13", "question"), # exclu par C1
Enonce(44, "p14", "assertif"), # re-exclu par C3
Enonce(45, "p17", "assertif"), # nouvel orphelin : exclu par C3
Enonce(46, "p1", "assertif"), # p18, lui, n'est plus entendu
]
for nom, corpus in [("periode t (jours 1-30)", corpus_t), ("periode t+1 (jours 31-60)", corpus_t1)]:
n_assert = sum(1 for e in corpus if e.acte == "assertif")
n_q = len(corpus) - n_assert
n_rel = sum(len(e.relations) for e in corpus)
print(f"{nom} : {len(corpus)} enonces ({n_assert} assertifs, {n_q} questions), {n_rel} relations exprimees")
print("\nApercu des 5 premiers enonces de la periode t :")
for e in corpus_t[:5]:
rel = ", ".join(f"{s}->{c}" for s, c in e.relations) or "(aucune)"
print(f" jour {e.jour:>2} | {e.prop:>4} | {e.acte:>8} | {rel}")