2009-07-28 16 views
5

Supongo que tengo la cadena "blöt träbåt" que tiene unos a y o con diéresis y anillo arriba. Quiero que se convierta en "blot trabat" tan simple como sea posible. He hecho algo de investigación y encontré el siguiente método: (. \u0308 para diéresis)¿Cuál es una buena manera de reemplazar caracteres internacionales con sus equivalentes latinos básicos usando Python?

import unicodedata 
unicode_string = unicodedata.normalize('NFKD', unicode(string)) 

Esto me dará la cadena en formato Unicode con los caracteres internacionales se dividieron en carta base y la combinación de caracteres Ahora para conseguir esto de nuevo a una cadena ASCII podría hacer ascii_string = unicode_string.encode('ASCII', 'ignore') y simplemente ignorará los caracteres combinados, dando como resultado la cadena "blot trabat".

La pregunta aquí es: ¿hay una mejor manera de hacer esto? Se siente como una manera indirecta, y estaba pensando que podría haber algo que desconozco. Por supuesto, podría concluir en una función auxiliar, pero preferiría verificar si esto ya no existe en Python.

+0

"La cadena ASCII" blöt träbåt "" es una contradicción. ASCII no tiene caracteres acentuados. ¿Quisiste decir "La cadena Unicode"? – MSalters

+0

Oye, eso es exactamente lo mismo que estoy haciendo en C# ... –

+0

Sí, me acabo de dar cuenta de que he usado el término equivocado. Sin embargo, no necesariamente tiene que ser Unicode. Se puede ampliar ASCII (que era lo que realmente quería decir). – Blixt

Respuesta

7

Sería mejor si creó una tabla explícita y luego usó el método unicode.translate. La ventaja sería que la transliteración es más precisa, p. transliterando "ö" a "oe" y "ß" a "ss", como debería hacerse en alemán.

Hay varios paquetes de transliteración en PyPI: translitcodec, Unidecode y trans.

+1

Tienes razón, la transliteración es mejor que simplemente eliminar las decoraciones de los personajes. Si '" große "' se convirtió en '" grose "', eso sería confuso (no es que creo que voy a tratar con palabras alemanas, pero aún así) ... – Blixt

+0

Uso * translitcodec * ya que parece ser el más módulo estructurado profesionalmente También, a diferencia de * trans *, reemplaza 'å' con' aa' y 'ä' con' ae' como es apropiado al translitering. – Blixt

+0

@Blixt: lo siento, no puedo ayudar con una recomendación de un paquete específico; esta podría ser una pregunta de SO por separado. Sin embargo, parece que ya has hecho una evaluación. –

Cuestiones relacionadas