Remove any punctuation character from the specified list of keywords,
    remove any double or more space character and represent Unicode
    characters in ASCII.


    @param keywords: a list of keywords strip out any punctuation characters.

    @param keyword_minimal_length: minimal number of characters of the
        keywords to be returned.


    @return: the set of keywords cleansed from any special Unicode
        accentuated character, punctuation character, and double space
        character.

def string_to_keywords(string,
        keyword_minimal_length=1):
    """
    Remove any punctuation character from the specified list of keywords,
    remove any double or more space character and represent Unicode
    characters in ASCII.


    @param keywords: a list of keywords strip out any punctuation characters.

    @param keyword_minimal_length: minimal number of characters of the
        keywords to be returned.


    @return: the set of keywords cleansed from any special Unicode
        accentuated character, punctuation character, and double space
        character.
    """
    # Convert the string to ASCII lower characters.
    ascii_string = unidecode.unidecode(string).lower()

    # Replace any punctuation character with space.
    punctuationless_string = re.sub(r"""[.,\\/#!$%\^&*;:{}=\-_`~()<>"']""", ' ', ascii_string)

    # Remove any double space character.
    cleansed_string = re.sub(r'\s{2,}', ' ', punctuationless_string)

    # Decompose the string into distinct keywords.
    keywords = set(cleansed_string.split(' '))

    # Filter out sub-keywords of less than 2 characters.
    return [ keyword for keyword in keywords if len(keyword) > keyword_minimal_length ]