File size: 1,053 Bytes
d10de1b
 
911dca2
d10de1b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""Split cleaned documents into overlapping text chunks."""

from config import CHUNK_SIZE, CHUNK_OVERLAP


def chunk_text(text: str, chunk_size: int = CHUNK_SIZE, overlap: int = CHUNK_OVERLAP) -> list[str]:
    """Slide a window over text to produce overlapping chunks."""
    chunks = []
    start = 0
    while start < len(text):
        end = start + chunk_size
        chunks.append(text[start:end].strip())
        start += chunk_size - overlap
    return [c for c in chunks if len(c) > 30]  # drop tiny trailing chunks


def chunk_documents(documents: list[dict]) -> list[dict]:
    """Chunk every document and tag each chunk with its source."""
    all_chunks = []
    for doc in documents:
        text_chunks = chunk_text(doc["text"])
        for i, chunk in enumerate(text_chunks):
            all_chunks.append({
                "source": doc["source"],
                "chunk_id": f"{doc['source']}__chunk_{i}",
                "text": chunk,
            })
    print(f"[chunking] Produced {len(all_chunks)} chunks.")
    return all_chunks