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
|