|
|
|
|
|
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 |
|
|