import re

def split_sentences(text: str):
    """
    Split text into sentences using punctuation
    """
    sentences = re.split(r'(?<=[.!?])\s+', text)
    return sentences

def generate_ngrams(text: str, min_len=2, max_len=6):
    """
    Generate n-grams (2-6 words) with start/end char offsets
    """
    phrases = []
    sentences = split_sentences(text)
    for sent in sentences:
        words = sent.split()
        for n in range(min_len, max_len + 1):
            for i in range(len(words) - n + 1):
                phrase_text = " ".join(words[i:i+n])
                start_idx = text.find(phrase_text)
                if start_idx != -1:
                    phrases.append({
                        "text": phrase_text,
                        "start": start_idx,
                        "end": start_idx + len(phrase_text)
                    })
    return phrases
