texto separar quitar por limpiar especiales espacios eliminar caracteres caracter cadenas acentos python perl unicode diacritics

separar - ¿Cómo reemplazar los caracteres Unicode por los caracteres ASCII en Python(script perl dado)?



string en python (4)

Para convertir a ASCII puede probar ASCII, Dammit o esta receta , que se reduce a:

>>> title = u"Klüft skräms inför på fédéral électoral große" >>> import unicodedata >>> unicodedata.normalize(''NFKD'', title).encode(''ascii'',''ignore'') ''Kluft skrams infor pa federal electoral groe''

Estoy tratando de aprender python y no pude averiguar cómo traducir la siguiente secuencia de comandos perl a python:

#!/usr/bin/perl -w use open qw(:std :utf8); while(<>) { s//x{00E4}/ae/; s//x{00F6}/oe/; s//x{00FC}/ue/; print; }

El script solo cambia las diéresis de Unicode a una salida ascii alternativa. (Así que la salida completa está en ascii). Le agradecería cualquier sugerencia. ¡Gracias!


Puede intentar unidecode para convertir Unicode en ascii en lugar de escribir expresiones regulares manuales. Es un puerto Python del módulo Perl de Text::Unidecode :

#!/usr/bin/env python import fileinput import locale from contextlib import closing from unidecode import unidecode # $ pip install unidecode def toascii(files=None, encoding=None, bufsize=-1): if encoding is None: encoding = locale.getpreferredencoding(False) with closing(fileinput.FileInput(files=files, bufsize=bufsize)) as file: for line in file: print unidecode(line.decode(encoding)), if __name__ == "__main__": import sys toascii(encoding=sys.argv.pop(1) if len(sys.argv) > 1 else None)

Utiliza la clase FileInput para evitar el estado global.

Ejemplo:

$ echo ''äöüß'' | python toascii.py utf-8 aouss


Yo uso translitcodec

>>> import translitcodec >>> print ''/xe4''.decode(''latin-1'') ä >>> print ''/xe4''.decode(''latin-1'').encode(''translit/long'').encode(''ascii'') ae >>> print ''/xe4''.decode(''latin-1'').encode(''translit/short'').encode(''ascii'') a

Puedes cambiar el lenguaje de decodificación a lo que necesites. Es posible que desee una función simple para reducir la longitud de una sola implementación.

def fancy2ascii(s): return s.decode(''latin-1'').encode(''translit/long'').encode(''ascii'')


  • Utilice el módulo de entrada de archivo para pasar sobre la entrada estándar o una lista de archivos,
  • decodifica las líneas que lees de UTF-8 a objetos Unicode
  • A continuación, asigne los caracteres Unicode que desee con el método de translate

translit.py se vería así:

#!/usr/bin/env python2.6 # -*- coding: utf-8 -*- import fileinput table = { 0xe4: u''ae'', ord(u''ö''): u''oe'', ord(u''ü''): u''ue'', ord(u''ß''): None, } for line in fileinput.input(): s = line.decode(''utf8'') print s.translate(table),

Y podrías usarlo así:

$ cat utf8.txt sömé täßt sömé täßt sömé täßt $ ./translit.py utf8.txt soemé taet soemé taet soemé taet

  • Actualizar:

En caso de que esté usando python, las cadenas son unicode por defecto y no necesita codificarlas si contienen caracteres no ASCII o incluso caracteres no latinos. Entonces la solución se verá como sigue:

line = ''Verhältnismäßigkeit, Möglichkeit'' table = { ord(''ä''): ''ae'', ord(''ö''): ''oe'', ord(''ü''): ''ue'', ord(''ß''): ''ss'', } line.translate(table) >>> ''Verhaeltnismaessigkeit, Moeglichkeit''