File size: 1,485 Bytes
65d97fa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37


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