code: def simple_tokenize(text, include_punctuation=False):
      
      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)
          ]
docs: 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.