49 caratteri — Dal centro al cerchio, e sì dal cerchio al centro
Un commento di DaG mi ha spinto a rispondermi da solo, limitando la risposta a quanto Dante ha scritto nella Commedia. @Dag, in fondo ci sono anche gli e.s. piú corti, ma non so quale sia il piú corto!
Il primo scoglio riguarda trovare una versione ".txt" con un alto rapporto segnale/rumore (segnale=endecasillabi, rumore=titoli, sottotitoli, introduzioni ai Canti, whatever). Forse non è un caso che il testo che ho usato sia distribuito nel contesto di un corso di programmazione.
Anche se il testo era in buono stato, andava comunque ripulito
- rimuovendo tutte le linee vuote
- rimuovendo tutte le intestazioni
- sostituendo il carattere "…" alla sequenza "..."
inoltre una ispezione dei risultati preliminari mostrava che alcune linee erano affette da
- sequenze di spazi di lunghezza non unitaria, p.e. "Pippo ␣ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ␣ si taglia"
- virgole non seguite da spazio, p.e. "Pippo,cammina dritto"
Il programma di analisi (in linguaggio Python) ed il suo output sono riportati in calce, qui mi preme di osservare che se per l'endecasillabo piú lungo credo si debba contare tutto, per l'endecasillabo più corto dovremmo forse contare solo spazi e lettere, e quindi "O anima cortese mantoana,
vale per 24 caratteri.
Eseguendo
from re import sub
def quanti_caratteri_quante_lettere(verso):
solo_lettere = sub(r'\W|\d', '', verso)
return ((len(verso), verso),
(len(solo_lettere), solo_lettere))
versi = []
for verso in open('commedia.txt').read().splitlines():
if len(verso) < 22: continue # titoli, etc non sono processati
if ': Canto' in verso : continue # alcuni titoli dei canti sono > 21
verso = verso.strip() # tolgo spazi a sx e a dx
if '...' in verso : # da 3 caratteri a 1 carattere
verso = verso.replace('...', '…')
verso = sub(' +', ' ', verso) # da " " a " "
verso = sub(' ([^A-Za-z])', '\\1', verso) # da " ," etc a ","
verso = sub(',([^ ])', ', \\1', verso) # da ",parola" a ", parola"
versi.append(quanti_caratteri_quante_lettere(verso))
N = 6
versi.sort(key=lambda t:t[0])
print(*("%d %s"%lv[0] for lv in versi[:+N]),
'...',
*("%d %s"%lv[0] for lv in versi[-N:]),
sep='\n')
print('—'*72,)
versi.sort(key=lambda t: (t[1][0], t[0][0]))
print(*("%d %s"%(lv[1][0], lv[0][1]) for lv in versi[:+N]),
'...',
*("%d %s"%(lv[1][0], lv[0][1]) for lv in versi[-N:]),
sep='\n')
si avra`
25 Così la circulata melodia
25 Ivi così una cornice lega
25 O imaginativa che ne rube
25 ordine senta la religione
26 "O anima cortese mantoana,
26 Antigone, Deifile e Argia,
...
47 quai fuor li vostri antichi e quai fuor li anni
47 quell'altro foco? e chi son quei che'l fenno?".
47 se'l ciel li addolcia, o lo'nferno li attosca".
48 dal quinto il quarto, e poi dal sesto il quinto.
48 de l'altro; e s'elli avvien ch'io l'altro cassi,
49 Dal centro al cerchio, e sì dal cerchio al centro
————————————————————————————————————————————————————————————————————————
20 così di Moisè come d'Elia,
20 e se rimane, dite come, poi
20 E io udi' ne la luce più dia
20 E"Ov'è ella?", sùbito diss'io.
20 or D, or I, or L in sue figure.
21 Ivi così una cornice lega
...
36 i occhi mi sciolse e disse:"Or drizza il nerbo
36 con li altri, innanzi a li altri aprì la canna,
36 da bocca il freddo, e da li occhi il cor tristo
37 dal quinto il quarto, e poi dal sesto il quinto.
38 quai fuor li vostri antichi e quai fuor li anni
39 Dal centro al cerchio, e sì dal cerchio al centro