b5fb363104
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
89 lines
3.9 KiB
Python
89 lines
3.9 KiB
Python
#!/usr/bin/env python3
|
||
"""
|
||
Parametri di configurazione della pipeline di chunking.
|
||
|
||
Modifica questo file per cambiare il comportamento di chunker.py,
|
||
verify_chunks.py e fix_chunks.py senza toccare il codice applicativo.
|
||
"""
|
||
|
||
# ─── Grandezza target dei chunk ───────────────────────────────────────────────
|
||
#
|
||
# TARGET_CHARS è la dimensione ideale a cui il chunker mira.
|
||
# CHUNK_TOLERANCE è la tolleranza relativa (es. 0.25 = ±25%).
|
||
#
|
||
# range accettabile = [TARGET × (1 − TOL), TARGET × (1 + TOL)]
|
||
#
|
||
# Con TARGET=600 e TOL=0.25 → ogni chunk sarà tra 450 e 750 char,
|
||
# il più vicino possibile a 600, terminando sempre su un confine di frase.
|
||
#
|
||
TARGET_CHARS = 300
|
||
CHUNK_TOLERANCE = 0.25
|
||
|
||
# ─── Overlap ──────────────────────────────────────────────────────────────────
|
||
|
||
# Numero di frasi ripetute all'inizio del chunk successivo per preservare
|
||
# il contesto tra chunk adiacenti della stessa sezione.
|
||
OVERLAP_SENTENCES = 1
|
||
|
||
# ─── Soglie di validazione ────────────────────────────────────────────────────
|
||
|
||
# fix_chunks.py spezza un chunk "too_long" solo se supera upper × questo fattore.
|
||
# Es. upper=750, fattore=1.5 → split solo per chunk > 1125 char.
|
||
# Chunk in [upper, upper×fattore] restano come warning non bloccanti.
|
||
SPLIT_THRESHOLD_FACTOR = 1.5
|
||
|
||
MATH_SYMS_MIN = 3 # min. simboli math per declassare incomplete → incomplete_math
|
||
|
||
# ─── Pattern e formato ────────────────────────────────────────────────────────
|
||
|
||
SENTENCE_SPLIT_PATTERN = r"(?<=[.!?»])\s+"
|
||
PREFIX_TEMPLATE = "[{sezione} > {titolo}]"
|
||
|
||
# ─── Protezione contenuti speciali ────────────────────────────────────────────
|
||
|
||
# Se True, un blocco prevalentemente tabella Markdown (≥50% righe |…|)
|
||
# viene emesso come chunk atomico senza sentence-splitting.
|
||
PROTECT_TABLES = True
|
||
|
||
# Riservato — blocchi LaTeX non spezzabili (implementazione futura).
|
||
PROTECT_MATH = True
|
||
|
||
# ─── Fix behavior ─────────────────────────────────────────────────────────────
|
||
|
||
# Numero massimo di iterazioni del loop fix → verify → fix.
|
||
# Con 1 si ottiene il comportamento originale (fix singolo senza re-verifica).
|
||
FIX_MAX_ITERATIONS = 3
|
||
|
||
# ─── Override per strategia ───────────────────────────────────────────────────
|
||
#
|
||
# Sovrascrivono TARGET_CHARS / CHUNK_TOLERANCE / OVERLAP_SENTENCES
|
||
# per la specifica strategia indicata in structure_profile.json.
|
||
# Chiavi riconosciute: "target_chars", "tolerance", "overlap".
|
||
#
|
||
STRATEGY_OVERRIDES: dict[str, dict] = {
|
||
"h3_aware": {
|
||
# Documenti strutturati H2→H3: chunk medi, overlap moderato.
|
||
"target_chars": 600,
|
||
"tolerance": 0.25,
|
||
"overlap": 2,
|
||
},
|
||
"h2_paragraph_split": {
|
||
# Documenti piatti (solo H2): chunk più ampi, overlap ridotto.
|
||
"target_chars": 800,
|
||
"tolerance": 0.25,
|
||
"overlap": 1,
|
||
},
|
||
"paragraph": {
|
||
# Documenti senza header significativi: chunk più corti.
|
||
"target_chars": 500,
|
||
"tolerance": 0.30,
|
||
"overlap": 1,
|
||
},
|
||
"sliding_window": {
|
||
# Testo lineare/narrativo: finestre ampie, overlap generoso.
|
||
"target_chars": 800,
|
||
"tolerance": 0.25,
|
||
"overlap": 3,
|
||
},
|
||
}
|