La cuestión

Al efectuar búsquedas en Internet, estamos acostumbrados a que no se distinga entre mayúsculas y minúsculas, y que se ignoren los acentos de las palabras. Para hacer esto en Python, antes que nada necesitamos una función que convierta los strings a la forma especificada. Una que haga lo siguiente:

>>> normalizar_string(u'Mónica Viñao')
'monica vinao'

Usando unicodedata.normalize

Unicode define equivalencias entre caracteres, o secuencias de caracteres, de los distintos estándares (ver http://en.wikipedia.org/wiki/Unicode_equivalence). Y define formas normales a las que podemos llevar un texto. Entonces podemos lograr la transformación que queremos haciendo una normalización. Los caracteres se descomponen, ignorando la parte que no es ASCII:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from unicodedata import normalize

def normalizar_string(unicode_string):
    u"""Retorna unicode_string normalizado para efectuar una búsqueda.

    >>> normalizar_string(u'Mónica Viñao')
    'monica vinao'
    
    """
    return normalize('NFKD', unicode_string).encode('ASCII', 'ignore').lower()

if __name__ == "__main__":
    import doctest
    doctest.testmod()

¡Gracias a Martin Conte Mac Donell!


USLA