Python, come elencare i nomi e valori delle lettere

Qualunque lettera di qualunque alfabeto al mondo ha un nome, nella codifica Unicode.

Questo nome può essere facilmente accessibile utilizzando il linguaggio di programmazione Python, senza bisogno neanche di importare librerie particolari. Basta usare una funzione attiva di default su ogni stringa: encode.

Questo metodo in realtà è stato pensato per cambiare la codifica dei testi a seconda delle esigenze. Ma siccome ogni codifica supporta soltanto alcune lettere, bisogna fornire all’interprete le istruzioni su come gestire le lettere non supportate.

Un’opzione possibile è “replace”: ogni volta che trova una lettera sconosciuta, l’interprete ci mette un punto interrogativo. Oppure c’è “ignore”: l’interprete farà finta di niente, non aggiungerà neanche uno spazio.

Un’opzione più utile può essere “namereplace” (sostituisci col nome). In questo caso il software trova il nome della lettera sconosciuta e lo inserisce nel testo, tra due parentesi graffe. Ovviamente il nome è in inglese, ma in alcuni casi può fornirci informazioni sulla pronuncia o sulla funzione di ciascun segno.

Ad esempio, se trovo su Wikipedia che “il rendimento η misura il rapporto...” eccetera, posso selezionare la lettera di cui voglio conoscere il significato, copiarla, aprire l’interprete Python, incollarla tra due virgolette e aggiungerci:

"η".encode(“ascii”, “namereplace”)

Il programma risponde:

b'\\n{greek small letter eta}'

Cioè che è una lettera minuscola (small) greca (greek) che si chiama “eta”.

Questa era facile (anche perché c’è il link nella pagina).

Proviamo con la parola Roma in greco. Trovo la scritta su Wikipedia, la copio e incollo in Idle e vado a fare il namereplace. Viene fuori che è composta dalla lettera greca maiuscola rho, dalla lettera greca minuscola omega con il tonos (un accento acuto), la lettera minuscola mu, e di nuovo la lettera minuscola eta.

In tailandese la parola Roma è lunga tre caratteri. Applico lo stesso metodo e viene fuori che il primo è il carattere tailandese “sara o”, il secondo è “ro rua”, il terzo è “mo ma”. Si intuisce che gli ultimi due sono sillabe e il primo deve avere qualche funzione particolare.

Il cinese purtroppo non ci dà nessuna soddisfazione: la parola Roma si compone di due simboli, di cui il primo si chiama “Cjk unified ideograph – 7f85” e il secondo “Cjk unified ideograph – 99ac”. Chiaro che ognuno di loro è una sillaba, ma non ne conosciamo il nome. Conosciamo però la posizione, e possiamo eventualmente ritrovarli, ad esempio nel menù Inserisci – Caratteri Speciali di Openoffice (il codice è in basso a destra; tutti i caratteri sono ordinati in ordine crescente; le cifre sono esadecimali: prima i numeri e poi le lettere tra a e f). Cosa difficile da fare normalmente, visto che il cinese è composto da migliaia di caratteri e le regole per stabilirne l’ordine sono abbastanza complicate.

Altre opzioni possibili per il metodo encode sono xmlcharrefreplace (sostituisci col riferimento xml) e backslashreplace (sostituisci con la notazione in barra rovesciata).

La prima restituisce il codice da inserire nell’html, in base decimale.

La seconda il valore unicode da inserire eventualmente in un programma python, ma con doppia barra rovesciata iniziale.

Tutti i risultati sono in formato byte. Per riconvertirli in stringa bisogna usare il metodo .decode()

Certo, per sapere come si chiama un carattere o quale è il suo valore è molto più pratica una ricerca su Google. Ma se si deve automatizzare qualcosa allora bisogna ricorrere alla programmazione.

Commenti

Post più popolari