|
|
|
|
| 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 |
| ''' |
| |
| chunks:list[str] = [] |
| |
| n:int = len(text) |
| size:int = n // char_count + 1 |
| 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 |
|
|