class Chunker: ''' Tronçonnage d'un texte en chunks ''' def __init__(self): pass def split_basic(self, text:str, char_count:int, overlap:int)->list[str]: ''' Découpe le texte avec des '\n'. La taille d'un chunk est de max count + 2 * overlap chunk = o1-c-o2 o1: les mots du chunk précédent ajoutés, il y en a 'overlap' ou 0 pour le premier chunk c: partie centrale du chunk o2: les mots du chunk suivant ajoutés, il y en a 'overlap' ou 0 pour le dernier chunk Args: char_count: le nombre de caractères dans un chunk (sans compter les mots ajoutés par recouvrement) overlap: le nombre de caractères du chunk précédent (et suivant) ajoutés au début (et à la fin) du chunk Return: La liste des chunks ''' # La liste qui sera renvoyée chunks:list[str] = [] # la liste qui sera renvoyée # Découpage du texte en morceaux de 'char_count' caractères n:int = len(text) size:int = n // char_count + 1 # nombre de chunks for i in range(size): start = i*char_count if i == 0 else i*char_count - overlap stop = (i+1)*char_count if i == size - 1 else (i+1)*char_count + overlap s = slice(start, stop) chunk:str = text[s] chunks.append(chunk) return chunks