input: Write a function to generate a Markov chain from a given text input. The function should split the text into words, build a Markov chain based on the frequency of word pairs, and then generate a new text of approximately 100 words using this chain. If the input text does not provide enough data to generate 100 words, the function should stop generating text as soon as it runs out of valid words.
  
  def generateMarkov(text):
    words = text.split(' ')
    markovChain = {}
  
    for i in range(len(words) - 2):
      current = words[i]
      next = words[i + 1]
      if current in markovChain:
        if next in markovChain[current]:
          markovChain[current][next] += 1
        else:
          markovChain[current][next] = 1
      else:
        markovChain[current] = {next: 1}
  
    generatedText = ""
    current = random.choice(list(markovChain))
    generatedText += current
  
    for i in range(100):
      choices = markovChain[current]
      choices = [
        key for key, value in choices.items()
        for i in range(value)
      ]
      try:
        current = random.choice(choices)
        generatedText += " " + current
      except:
        break
  
    return generatedText
  
  assert generateMarkov('Alice was beginning to get very tired of sitting by her sister on the bank, and of having nothing to do: once or twice she had peeped into the book her sister was reading, but it had no pictures or conversations in it, `and what is the use of a book,' thought Alice `without pictures or conversation?') is not None
  assert generateMarkov('The quick brown fox jumps over the lazy dog') == "The quick brown fox jumps over the lazy dog"
  assert generateMarkov('') == ''
output: import random
  
  def generateMarkov(text):
      words = text.split(' ')
      markovChain = {}
  
      for i in range(len(words) - 1):
          current = words[i]
          next = words[i + 1]
          if current in markovChain:
              if next in markovChain[current]:
                  markovChain[current][next] += 1
              else:
                  markovChain[current][next] = 1
          else:
              markovChain[current] = {next: 1}
  
      generatedText = ""
      current = random.choice(list(markovChain))
      generatedText += current
  
      for i in range(100):
          if current not in markovChain:
              break
          choices = markovChain[current]
          next = random.choices(list(choices.keys()), weights=list(choices.values()))[0]
          generatedText += " " + next
          current = next
  
      return generatedText