<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def simple_tokenize(text, include_punctuation=False):
 """ Tokenize the given text using a straightforward, Unicode-aware token expression. The expression mostly implements the rules of Unicode Annex #29 that are contained in the `regex` module's word boundary matching, including the refinement that splits words between apostrophes and vowels in order to separate tokens such as the French article «l'». It makes sure not to split in the middle of a grapheme, so that zero-width joiners and marks on Devanagari words work correctly. Our customizations to the expression are: - It leaves sequences of Chinese or Japanese characters (specifically, Han ideograms and hiragana) relatively untokenized, instead of splitting each character into its own token. - If `include_punctuation` is False (the default), it outputs only the tokens that start with a word-like character, or miscellaneous symbols such as emoji. If `include_punctuation` is True, it outputs all non-space tokens. - It keeps Southeast Asian scripts, such as Thai, glued together. This yields tokens that are much too long, but the alternative is that every grapheme would end up in its own token, which is worse. """

    text = unicodedata.normalize('NFC', text)
    if include_punctuation:
        return [
            token.casefold()
            for token in TOKEN_RE_WITH_PUNCTUATION.findall(text)
        ]
    else:
        return [
            token.strip("'").casefold()
            for token in TOKEN_RE.findall(text)
        ]