Bestemmie con le emoji in Python

di | 2 Ottobre 2022

No, non è un progetto artistico, è l’ennesima iterazione del software di Lombardia Incoeu, di cui ho già parlato qui. In sostanza, il vecchio software del Mini-TG, evoluto dal Sunto (che, al momento della scrittura dell’articolo, luglio, non si usa più, magari a ottobre sarà tornato) faceva una cosa banale: eliminava l’intestazione e il tag, toglieva l’ultima riga alla fine e saltava una riga, quella di spazio tra l’intestazione e il contenuto.

Non chiedetemi perché, è decisamente meno sensato di “se la linea è vuota, non mandarla su Twitter”, ma all’epoca avevo fatto così. Comunque, modificarlo è semplice e non richiede grandi casini.

Ora si passa alla parte interessante, rivedere la logica operativa. Il vecchio MINI-TG, per chi non lo sapesse, era una roba così:

MINI-TG DEL MATIN 10/6/2022

🇫🇷 Franza, disaster ai urne per el Macron: foeura del Parlament el president de l’Assemblea e i minister de salut e transizzion ecologega. E i Republegan restarann a l’oposizzion
💻 Gh’è rivad el Telegram Premium! Per 6 franch se podarann caregà file pussee gross, se descaregarà pussee a la svelta e se podarann havégh pussee de canai e de reazzion e trascrizzion di messagg vocai
🇲🇩 La Moldavia la proibiss i film de guerra, show politegh e de informazzion de la Russia per sbassà la propaganda
🛴 I monopatin de Roma finissen in su la CNN: “gh’haveven de sistemà el trafegh, ma inn deventade di trapole de mort”
🇪🇦 Andalusia, el Partid Popolar l’ha vensgiud i elezzion regionai
🏎 Formula 1, in Canada el vinc el Verstappen, segond el Sainz
🇨🇴 Colombia, elesgiud president el Petro, l’è el prim president de sinistra del Paes

🗞 @lombardiaincoeu

In sostanza, un’intestazione, una nuova linea, una lunga serie di notizie che iniziano con un’emoji, un’altra linea nuova e la firma.

Il nuovo formato, invece, avrà sempre l’intestazione, una nuova linea, ma poi sarà diviso in vari blocchetti, una roba del tipo:

MINI-TG 4/7/2022

Atualità
👶 Tisin, el nass un fiolin a la galera de la Farera, l’è la prima voeulta in la storia del Canton
🚈 La frena bruscament la M1, feride do done in sui 70 agn
🏔 Marmolada, 7 mort, 8 ferid e 14 desperdud. I socorritor: “ne despias, ma podom no recuverai. Improbabel che sibien viv”
🚓 Milan, trii omen violenten una tosa in piazza Napoli, du fermad, el terz in fuga
🦠 Covid in Italia, el cress el tass de positività: l’è al 27,9%
📽 Puja, el regista Oscar Paul Haggis el torna in libertà dopo di acuse de violenza sessual

Politega
🚕 Tassì, el Fontana el dà solidarietà a quei che protesten contra el DDL concorrenza
🗳 Politega, el Draghi e ‘l Conte se incontratann mercoldì, mitingh spostad per la tragedia de la Marmolada
✒️ El saria dree per rivà el noeuv partid de Adinolfi e Di Stefano, el se ciamarà Alternativa X L’Italia – No Draghi 2028
🚩 Rebellot in del Partid Comunista, el profil central: “Rizzo l’è secretari, profil de Milan hackerad”. Ma se parla de varie scission

Guerra in Ucraina
🇨🇭 El president de la Rada a Lugan: “Mosca la pagarà la fatura”
🇺🇦 Ucraina, el Zelensky in direta a Lugan: “fà su ancamò l’Ucraina un esercizzi de pas”
💶 La stima: per fà su ancamò l’Ucraina ghe volarann 750 miliard
🇷🇺 Spazzi, i cosmonauta russ in su la ISS se fann fotografà cont i bandere di republeghe de Doneck e Lugansk
🇺🇦 El Servizzi de Frontera de l’Ucraina l’ha publegad la foto de la bandera sgialda-bloeu issada in su l’Isola di Biss

Esteri
🇺🇸 Stat Unid, relassad el video del negher mazzad de la polizzia in Ohio, colpid de 60 balle
🇩🇰 Atach de Copenaghen, quell che l’ha fad el resta in detenzion psichiatrega
🇫🇷 Franza, la procura general la dà su recors in Cassazzion per l’estradizzion di brigatista italian
🇺🇸 Stat Unid, varie s’ciopetade a Chicago, pussee de 60 ferid in tuta la cità, pussee de 10 i mort,
🇵🇸 Mazzament de la Shireen Abu Akleh, i Stat Unid: “probabel che sibien stad i israelian, ma nissuna certezza”

🤔 El t’è piasud el noeuv format del MINI-TG? Trop curt? Trop longh? Trop despess? Lassa ‘n coment chi de sota 👇

🗞 @lombardiaincoeu

In sostanza, le nuove linee sono molto più usate e non implicano più la fine del messaggio, ma possono indicare anche solo il cambio d’argomento. Al contempo, il format Twitter non cambia, è sempre “#MiniTG: ” più la notizia con l’emoji. Bisogna dunque eliminare le intestazioni, ho deciso di farlo identificando l’emoji all’inizio: se c’è è una notizia da pubblicare, sennò non si pubblica. In questo caso c’è anche un messaggio che chiede informazioni all’utenza sul gradimento del nuovo TG.

All’inizio provo con una tecnica che trovo in una guida che sfrutta Unicode, ma non funziona. Mi rivolgo quindi alla libreria emoji, che con la semplice funzione “emoji.is_emoji()” permette di dire se un carattere è un’emoji o meno. Perfetto per il mio scopo, quindi tiro fuori una logica applicativa del genere:

if "MINI-TG" not in news and news != "" and emoji.is_emoji(str(news[0])) == True:

E funziona! Ma c’è un ma: non funziona con le bandiere. Quindi “🏫 Scoeula, de doman proibid el latin in tucc i istitut” verrebbe pubblicato, mentre “🇩🇪 Germania, smorzada la darrera central nuclear, de incoeu se brusarann i alber per la corrent” no.

Come mai? Molti linguaggi, in effetti, son nati nell’era in cui si scriveva ancora come dei veri e propri esseri umani, quindi se gli dici “dammi il primo carattere” di “ciao” ti danno “c”, ossia il primo carattere.

Ma le emoji spesso son composite, un po’ come degli ideogrammi, ad esempio la bandiera LGBT è composta dall’emoji bandiera e dall’emoji arcobaleno, l’emoji della giudice bianca è composta invece da donna, colore chiaro della pelle, carattere di unificazione e bilancia. In sostanza, è una lingua propria, donna bianca bilancia, che in emojese indica una giudice come Sandra Day O’Connor, il calcolatore poi lo traduce in un semplice carattere visivo comprensibile per noi.

Anche le bandiere sono composte, ma a modo loro: vi sono una serie di “pseudolettere” che, combinate, danno origine ad un’emoji: ad esempio CH per la Svizzera, US per gli Stati Uniti, alcune entità non sovrane hanno la propria emoji (le Canarie o Martinica, ad esempio), mentre alcuni hanno doppioni per ragioni geografiche (la Spagna e gli Stati Uniti, per le isole esterne o per le zone di sovranità). Ad oggi quasi tutte le emoji, anche quelle non sovrane, utilizzano due caratteri, fanno eccezione Scozia, Galles e Inghilterra, che usano invece bandiera nera, gb e una sigla a tre caratteri. Alcuni usano effettivamente la codifica sigla statale+sigla locale con un “cancel tag”, ad esempio “IT25” dovrebbe dare la bandiera della Lombardia, ma dubito che qualcuno lo supporti effettivamente. Non è standard.

In ogni caso, se io chiedo il primo carattere di “🇩🇪 Germania” non avrò la bandiera tedesca, ma lo pseudocarattere “D”, carattere che per la libreria non è un’emoji. Hanno un po’ ragione e un po’ torto.

La soluzione? Un codice del genere:

if "MINI-TG" not in news and news != "" and (emoji.is_emoji(str(news[0])) == True or emoji.is_emoji(str(news[0])+str(news[1])) == True):

Che verifica anche due caratteri, così che possa leggere “DE” e non “D”, “DE” che correttamente viene interpretato come emoji. Poi, dato che uso “or”, non impedisce che le emoji singole vengano interpretate come tali, idem per quelle multicomposite, dove la base è comunque un’emoji, quindi non creerebbero problemi.

Che dire, codice interessante (che verrà sicuramente migliorato) e che mi ha insegnato varie cose utili… Soprattutto nell’era delle emoji ovunque 😀

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.