Il Motore Anagrammatico del Gaunt

Anagrammatica

Intelligiochi, MCmicrocomputer n° 90, novembre 1989

Dopo quasi quattro anni ritorno su uno dei miei temi favoriti di ricerca ludico-informatica, quello della manipolazione delle parole e del linguaggio. Oggetto di questo mese è quella che io chiamo "autoanagrammatica", disciplina ludica che si occupa dello studio, dell'analisi e della produzione di anagrammi per via automatica.

Il tema della manipolazione automatica o semiautomatica del linguaggio è, come i più anziani fra i miei lettori ricorderanno, uno dei miei preferiti. Mi hanno sempre affascinato la ricerca delle leggi nascoste nella struttura del linguaggio umano ed il conseguente studio delle possibilità di intervento su di esse al fine di creare qualcosa di nuovo. Gli sperimentalismi formali di molte correnti letterarie di questo secolo, dai futuristi ai dada al gruppo Oulipo, mi hanno sempre profondamente interessato: tanto più in quanto si tratta di applicazioni particolarmente adatte ad essere realizzate con l'ausilio dell'elaboratore, e dunque facilmente ripetibili in modo casalingo da ciascuno di noi. È dunque facile, ai giorni nostri, ripercorrere con l'ausilio del nostro fido personal alcuni dei sentieri di ricerca linguistica esplorati in passato da altri, o addirittura tracciarne di nuovi giocando con le parole e le loro leggi per vedere cosa ne possa venire fuori. Bastano allo scopo solo un po' di pazienza ed una manciata di linee di programma. Il tutto, ovviamente, sempre in modo semiserio, in linea con il consueto spirito a metà fra la ricerca ed il gioco che costituisce la filosofia del vero Intelligiochista e di questa rubrica.

In particolare questo mese mi occuperò di riprendere un tema che avevo già trattato su queste pagine moltissimo tempo fa, quasi quattro anni (come passa il tempo!), e cioè quello della ricerca e della generazione automatica di anagrammi. Per la precisione esso comparve su MC 48 del gennaio 1986, ben quarantadue numeri fa: e per questo non mi preoccuperò troppo di evitare ora di ripetere alcune delle cose già dette in quella occasione, nella convinzione che molti fra i miei lettori di adesso non abbiano presente quella particolare puntata così lontana nel passato. Così, anche per evitare fastidiosi rimandi ad un arretrato molto... arretrato che forse non tutti avranno, questo mese riprenderò il discorso da capo trattandolo nella sua completezza, pur cercando nel contempo di aggiungere a quanto detto all'epoca alcune considerazioni nuove e recenti.

Alla ricerca dell'anagramma

Non vorrei ora dover spiegare cosa sia un anagramma: si tratta infatti di uno dei più antichi giochi con le parole che l'uomo conosca e non dubito che tutti i miei lettori si siano anzi più volte cimentati con esso. Esiste ed è praticato da praticamente tutte le culture la cui scrittura non sia ideografica ma nella quale le parole siano formate da lettere aventi valore proprio. E non è sempre e solo un gioco fine a se stesso, anzi molti famosi oratori hanno usato l'anagramma come figura retorica per dare maggior effetto ai loro discorsi. L'anagramma infatti sottolinea assai vivacemente, grazie al bisticcio fra parole semanticamente differenti ma formalmente imparentate, l'antitesi di due concetti contrapposti e spesso opposti. Pochi sanno, ad esempio, che perfino Gesù ricorreva talvolta all'uso retorico dell'anagramma nel suo parlare. Un esempio eclatante lo si ha nella famosa requisitoria contro il comportamento ipocrita dei Farisei, incentrata sul seguente passo: "Guide cieche! Voi scolate il moscerino e inghiottite il cammello! Guai a voi, Scribi e Farisei ipocriti, che pulite il di fuori del bicchiere e del piatto, mentre il di dentro è pieno di rapina e di immondezza!" (Matteo 23,24-25). La forza retorica di queste dure parole, che vogliono stigmatizzare l'ipocrisia di coloro i quali mostrano di curarsi troppo delle piccole cose ma ignorano quelle realmente importanti, è ovviamente tutta concentrata nella stridente contrapposizione fra le relative dimensioni del moscerino e del cammello. Non è certamente un caso che siano stati scelti proprio questi due animali anziché altri: infatti in aramaico, lingua adoperata da Gesù, i termini "moscerino" e "cammello" si dicono rispettivamente "Galma" e "Gamla".

L'anagramma diventa un gioco di società assai diffuso durante il periodo successivo al XVIII secolo, assieme ad altri giochi con le parole quali gli acrostici, i logogrifi, le catene di parole e così via. Applicazione classica dell'anagramma era quello di tirare fuori una frase od un motto a partire dalle lettere che formavano nome e cognome di una certa persona. Da allora una buona abilità anagrammatica fa parte del repertorio basilare di ogni enigmista che si rispetti, e va detto che in questi ultimi tre secoli di applicazione costante ne sono stati prodotti esemplari veramente notevoli; quale ad esempio quello famosissimo, che citavo nella puntata precedente, di Girolamo Savonarola che saliva al rogo romano.

Anagrammi automatici

Con l'avvento dei calcolatori anche questa attività di ricerca squisitamente intellettuale, situata a metà fra l'arte ed il gioco, ha però cominciato ad essere in certa misura automatizzata perdendo secondo alcuni parte del suo fascino. La creazione di dizionari computerizzati ha infatti aperto le porte ad un'amplissima serie di ricerche linguistiche e lessicografiche, peraltro serissime, ma anche ad una notevole serie di applicazioni ludiche della manipolazione testuale fra cui spicca appunto quella della ricerca di anagrammi.

Chiarisco subito che con "ricerca automatica di anagrammi" non intendo la semplice generazione di tutte le permutazioni di una data parola; un anagramma per essere tale deve essere una parola esistente, leggibile e di senso compiuto, costituita dalle stesse lettere che formano un'altra parola anch'essa esistente.

Fra i risultati di queste ricerche nello specifico settore va annoverata la pubblicazione di alcuni "dizionari di anagrammi", ossia volumi contenenti un elenco ordinato di anagrammi di alcune parole di uso comune, avvenuta in America negli scorsi anni; cito ad esempio quello della Follett Publishing Company, uscito nel 1964 e contenente circa 20.000 parole di sette lettere o meno, e qello pubblicato nel 1973 dalla The Computer Puzzle Library e contenente quasi 14.000 parole di sette lettere. Più recentemente invece lo stesso meccanismo di ricerca che ha permesso di compilare questi dizionari è stato applicato in alcune trasmissioni televisive (ad esempio la famosa "Paroliamo") per verificare la possibilità di formare parole esistenti a partire da lettere estratte in modo casuale.

Fu all'incirca nei primi anni sessanta che molti ricercatori, in modo indipendente, scoprirono o riscoprirono il metodo più efficiente per generare un "dizionario di anagrammi". Esso si basa sul concetto di "firma" di una parola che vedremo fra un attimo. Il più vecchio riferimento bibliografico che conosco in cui viene descritto con precisione il dizionario degli anagrammi è un articolo di Martin Gardner (sempre lui!) risalente al 1973, in cui la paternità di questo concetto viene riconosciuta a Nicholas Temperley. Esattamente dieci anni dopo Jon Bentley dei laboratori AT&T illustrava in dettaglio con esempi scritti in C ed Awk il metodo di generazione del dizionario degli anagrammi partendo dal dizionario standard distribuito con lo Unix, nella seconda puntata (pubblicata a settembre 1983) della sua rubrica di algoritmi pubblicata dal serissimo "Communications of the ACM", organo della nota Association for Computing Machineries americana. (Tutta la serie di questa rubrica è stata poi ristampata nell'eccellente libro "programming Pearls" dalla Addison-Wesley). Nel 1984 l'argomento veniva ulteriormente ripreso da A. K. Dewdney nella rubrica "Computer (Re)Creations" su Scientific American, in una puntata dedicata equamente ad anagrammi e pangrammi nella quale si descriveva l'estensione del metodo della firma alla generazione di anagrammi formati da intere frasi.

Vediamo dunque i passi che occorrono per poter mettere in grado il nostro buon personal di procedere alla ricerca di anagrammi.

Firme e anagrammi

Il concetto che sta alla base del dizionario degli anagrammi è molto semplice ma geniale, costituendo un classico Uovo di Colombo nel suo genere. Esso sfrutta una cosa che Bentley chiama "signature" (e cioè "firma") di una parola. La firma di una parola altro non è che l'insieme delle lettere che la compongono, disposte in ordine alfabetico; potremmo anche chiamarlo "anagramma fondamentale" o "canonico". Così ad esempio la firma di "intelligiochi" è "ceghiiiillnot".

Condizione necessaria e sufficiente per poter produrre un dizionario di anagrammi è naturalmente quella di disporre di un dizionario vero; intendendo in questo caso per "dizionario" solo un insieme ordinato di parole reali senza le definizioni che invece formano parte integrante di un dizionario usuale. Il primo passo da compiere è quello di trasformare il dizionario vero in un dizionario di firme; per fare ciò basta generare la firma di ciascuna parola del dizionario e creare un file formato dalla coppia ordinata firma+parola. Fatto ciò si deve riordinare il file alfabeticamente secondo le firme. A questo si dispone di un dizionario delle firme nel quale tutte le parole aventi la medesima firma sono adiacenti l'una all'altra. Basta ora "collassare" in un'unica "definizione" tutte le parole aventi la medesima firma ed il gioco è fatto: abbiamo ottenuto un dizionario degli anagrammi ordinato per firma che, a fianco di ciascuna firma, elenca tutte le parole reali che ne sono l'anagramma.

Dato questo dizionario è facilissimo trovare qualsiasi anagramma; basta prendere la parola da anagrammare, estrarne la firma e cercarla nel dizionario, per trovare così tutte quelle parole (se esistono) che sono anagrammi della parola di partenza. Questo procedimento si applica naturalmente al solo caso di anagrammi formati da una sola parola, ma si può pensare di estenderne il meccanismo anche al caso di anagrammi formati da un'intera frase. Per fare ciò non occorre modificare il dizionario degli anagrammi ma solo la procedura di ricerca, che deve essere resa iterativa o ricorsiva. A grandi linee essa deve infatti ricercare nel dizionario ogni "sottofirma" appartenente alla firma della frase in esame, proseguendo ciclicamente la ricerca fino a quando tutte le lettere della firma non sono esaurite (segno che si è trovato un anagramma) ovvero avanza qualche lettera (segno che le prime sottofirme vanno modificate). Si tratta in altre parole di un'interessante applicazione del metodo del backtracking applicato alla ricerca di sottostringhe, un compito non banale ma certamente non impossibile a realizzarsi. Naturalmente il fatto di arivare eventualmente a trovare un insieme di parole che nel loro complesso siano l'anagramma della frase di partenza non garantisce che la nuova frase da esse risultante sia di senso compiuto; e qui tornano in ballo la sensibilità linguistica e l'abilità enigmistica del ricercatore, il quale deve intervenire manualmente per scartare le frasi assurde e riordinare quelle possibili fino a conferire loro un aspetto ragionevole.

Un esempio personale

Dopo avervi raccontato tutte queste belle cose sulle firme e gli anagrammi non vorrei lasciarvi con l'impressione che si tratti di tutte cose campate in aria, dalla difficile applicazione reale. E dunque ho preparato un dizionario di anagrammi personale a partire dalla discreta scorta di testi che si trovano parcheggiati sul mio hard disk. Già nella puntata di quattro anni fa parlai del mio "dizionario personale" che mi diverto a mantenere costantemente aggiornato proprio in vista di situazioni ludico-informatiche come questa. Esso viene alimentato da tutte le parole che compongono i miei articoli ed al momento contiene circa 26.000 vocaboli diversi (quattro anni fa erano 11.000). Nelle figure che illustrano questa puntata sono riportate tutte le fasi della preparazione del dizionario degli anagrammi ed alcuni dei risultati che da esso è possibile estrarre.

Si comincia come ho detto dal dizionario grezzo di cui si vedono due stralci in figura 1. Poche righe di C combinate ai potenti tool di Unix (ma con un po' più di lavoro la cosa si può fare in qualsiasi linguaggio) permettono di passare dal dizionario "vero" al dizionario delle firme, di cui in figura 2 vediamo le prime e le ultime voci. Raggruppare assieme le voci aventi medesima firma è ora un gioco da ragazzi che conduce al dizionario degli anagrammi di figura 3.

Questo ultimo file nel mio caso contiene circa 1.500 voci, che possono sembrare poche se raffrontate alle 26.000 da cui eravamo partiti ma che costituiscono in realtà un numero niente affatto piccolo. Esso è il prezioso substrato mediante il quale si possono realizzare semplici ricerche di anagrammi o togliersi particolari curiosità linguistiche mediante ispezione diretta. Tanto per esemplificare, in figura 4 e figura 5 ho estratto un minuscolo sottoinsieme di questi mille e cinquecento anagrammi, in modo da potervi dare un'idea della quantità di interessanti informazioni in esso contenute. Si tratta di materiale assai appetibie per un enigmista, che in esso può trovare spunti forse insperati. Chicche come la cristiana rinascita non sono inusuali in questo file; e mi fanno pensare con un po' di invidia a cosa può tirare fuori la redazione lessicografica Zanichelli dai suoi archivi contenenti le diverse centinaia di migliaia di parole dello Zingarelli!

Conclusione

Termino dunque qui, per via dello spazio sempre tiranno, il discorsetto sugli anagrammi. Che però non vorrei considerare del tutto concluso. Mi piacerebbe, come sempre, che voi mi mandaste le vostre considerazioni in merito, e meglio ancora i risultati ottenuti dalle vostre eventuali sperimentazioni su questo campo ed altri ad esso collegati. Ricordo che chi dispone dell'accesso ad un sistema Unix può utilmente sfruttare il dizionario standard di sistema per generare anagrammi inglesi. Per gli altri l'ostacolo principale alla ricerca di anagrammi può essere quello del reperimento di un dizionario in linea, forse aggirabile solo disponendo di word processor dotati di Thesaurus registrati "in chiaro". In ogni caso mi piacerebbe sentire le vostre idee ed i vostri commenti sull'argomento, sia per lettera che per mezzo di MC-link.

E nell'augurarvi buon lavoro vi dò come al solito appuntamento al prossimo mese.


Figura 1:

A
AB
ABANO
ABATE
ABBAGLIARE
ABBANDONA
ABBANDONANDO
ABBANDONARE
ABBANDONATA
ABBANDONATE
ABBANDONATI
ABBANDONATO
ABBANDONERA
ABBANDONO
 (...)
ZOCCOLO
ZOLLA
ZONA
ZONE
ZOOM
ZOOMANDO
ZOOMARE
ZOOMARNE
ZOOMATA
ZOPPICANTE
ZORTECH
ZUCCHERINO
ZUCCHERO
ZURIGO


Figura 2:

a                             a
aaaaacgimmnrt                 anagrammatica
aaaaagginttvv                 avvantaggiata
aaaaaggintvvv                 avvantaggiava
aaaabbdnnot                   abbandonata
aaaabbnstz                    abbastanza
aaaabbsst                     abbassata
aaaabcgiilmmmooprrrt          macroprogrammabilita
aaaabdeilotttu                autoadattabile
aaaabeflnt                    analfabeta
 (...)                         (...)
opttuu                        output
orssu                         russo
orst                          sort
ortu                          tour
ortx                          torx
orx                           xor
ost                           sto
osu                           uso
otttu                         tutto
otu                           tuo


Figura 3:

aaabbdennor                   abbandonare abbandonera
aaaccertt                     accertata attaccare
aaaccettt                     accettata attaccate
aaadottt                      adattato adottata
aaaeilnrzz                    analizzare analizzera
aabbinot                      abbinato abbonati
aabceimr                      cambiare cambiera
aabceimrs                     scambiare scambiera
aabcin                        bianca cabina
aabeiilrt                     abilitare abilitera
aabeln                        balena banale
aaberst                       bastare bastera
aabost                        basato sabato
aaccdinor                     cardanico caricando
 (...)                         (...)
iort                          rito tiro
iortt                         rotti trito
isu                           sui usi
loop                          loop polo pool
loops                         polso spool
loor                          loro orlo
nooors                        orsono sonoro
noort                         torno trono
noot                          noto tono
ooprt                         porto potro
oortt                         rotto torto
oott                          otto toto
opst                          post stop
osu                           suo uso


Figura 4:

acronimo armonico
alimentato animaletto
allocarsi lasciarlo
allocati localita
altamente lamentate
anatemi emanati
anticipato antipatico
atomici citiamo
attributo tributato
calatosi lasciato
campionati inciampato
canali lancia
cani cina
capitoli politica
cartoncino raccontino
catene tenace
citarmi matrici
considera secondari
consumatore oscuramento
contrari tornarci
creativa ricavate
cristiana rinascita
diecimila micidiale
esplorata estrapola
germania mangiare
giornata ignorata
giravano ignorava
granai ignara
impegnata pagamenti
incastrato trascinato
incastro scornati
incoraggia riaggancio
lascera scalare
lasceremo mescolare
manipolare parliamone
nevicata vaticane
normandia rimandano
organizza ragazzino
paragoni ripagano
portavoci provocati
presentava spaventare
prestabiliti rispettabili
settanta stentata


Figura 5:

adatto adotta datato dotata
alte tale tela
alti lati tali
ammessi immessa massime
andremo meandro moderna
anno nano nona
aperti pareti pietra
apice epica piace
armi mira rami rima
ascolta scalato scatola
aspre persa presa saper spera
attese esatte estate
averli rileva rivale rivela
averlo valore volare
avverarsi avversari ravvisare
caos caso cosa
carenti citarne incerta
carte certa creta
comparse compresa scompare
comprare comprera
contraenti incentrato incontrate
creatori erratico ricreato
fascio fiasco sfocia
girano ignaro ignora organi
intestare intestera trentasei
limitare limitera militare
migrano ramingo rimango
nastro nostra strano
ottale telato totale
parso prosa sopra
parto porta potra prato
pensare pensera saperne
perdeva pervade preveda
relativi rilevati rivelati
relativo rilevato rivelato
riservata riversata travisare
scattano scontata stancato
stato tasto tosta
stavo vasto vosta

Intelligiochi, MCmicrocomputer n° 90, novembre 1989
Copyright © 1989, Corrado Giustozzi. Tutti i diritti riservati.

Ultima modifica: 25 marzo 2012
Visitatori dal 6 maggio 2003: 18,863

Torna alle informazioni tecniche sul Motore Anagrammatico
Vai alla Pagina dei Commenti

Copyright © 1995-2012 Corrado Giustozzi