input: Write a function named generate_ngrams that takes two parameters: a text string and a window_size integer. The function should generate n-grams with the given window size from the text, and then return a Counter object containing the frequency of each n-gram. If the window size is greater than the length of the text, the function should return an empty Counter. Split the text into words, and convert them to lower case before generating n-grams.
  assert generate_ngrams("The quick brown fox jumps over the lazy dog", 3) == Counter({'the quick brown': 3, 'quick brown fox': 2, 'over the lazy': 1, 'brown fox jumps': 1, 'fox jumps over': 1, 'the lazy dog': 1, 'jumps over the': 1, 'quick brown fox jumps': 1})
  assert generate_ngrams("Hello World", 5) == Counter()
  assert generate_ngrams("", 3) == Counter()
  assert generate_ngrams("A B C D", 2) == Counter({'a b': 1, 'b c': 1, 'c d': 1})
  assert generate_ngrams("Single", 2) == Counter({'single': 1})
output: def generate_ngrams(text, window_size):
      from collections import Counter
      words = text.lower().split()
      if window_size > len(words):
          return Counter()
      ngrams = [' '.join(words[i:i+window_size]) for i in range(len(words) - window_size + 1)]
      return Counter(ngrams)