Python e la normalizzazione carattere
-
08-10-2019 - |
Domanda
Ciao
Ho recuperare il testo base di dati utf8 da una fonte straniera che contiene caratteri speciali come u"ıöüç"
mentre io voglio loro normalizzare a Inglese come "ıöüç"
-> "iouc"
. Quale sarebbe il modo migliore per raggiungere questo obiettivo?
Soluzione
Mi consiglia di utilizzare Unidecode modulo :
>>> from unidecode import unidecode
>>> unidecode(u'ıöüç')
'iouc'
Si noti come si alimentano una stringa unicode e genera una stringa di byte. L'uscita è garantito per essere ASCII.
Altri suggerimenti
Tutto dipende da quanto si vuole andare a traslitterare il risultato. Se si desidera convertire tutto fino a ASCII (αβγ
a abg
) allora unidecode
è la strada da percorrere.
Se si desidera solo per rimuovere accenti da lettere accentate, allora si potrebbe provare a scomporre la stringa tramite il modulo normalizzazione NFKD (Questo trasforma la lettera accentata á
a una lettera a
pianura seguita da U+0301 COMBINING ACUTE ACCENT
) e poi scartando gli accenti (che appartengono a Unicode classe di caratteri Mn
- "Mark, senza spaziatura" ).
import unicodedata
def remove_nonspacing_marks(s):
"Decompose the unicode string s and remove non-spacing marks."
return ''.join(c for c in unicodedata.normalize('NFKD', s)
if unicodedata.category(c) != 'Mn')
Il modo più semplice che ho trovato:
unicodedata.normalize('NFKD', s).encode("ascii", "ignore")
import unicodedata
unicodedata.normalize()