import unicodedata


def normalize_string(string):
    """Normalize string for tokenization and matching.
    
    Characters can come in composed or decomposed varieties.
    We normalize to decomposed characters in order to allow
    fine-grained control of accent patterns. The string is 
    converted to lowercase.
    
    Argument:
        string: str to be normalized
    
    Returns:
        str decomposed with NFD and lowercased
    
    NB: normalized text should not replace any display/stored
    texts because capitalization is stripped and also decomposed
    strings are unsightly."""
    
    return unicodedata.normalize('NFD', string).lower()