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?

È stato utile?

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()

http://docs.python.org/library/unicodedata.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top