Spaces:
Sleeping
Sleeping
| """Text chunking helpers for the RAG pipeline.""" | |
| from langchain_text_splitters import RecursiveCharacterTextSplitter | |
| from src.config import CHUNK_OVERLAP, CHUNK_SIZE | |
| def split_pages_into_chunks(pages: list[dict]) -> list[dict]: | |
| """Split extracted page text into smaller chunks with source metadata.""" | |
| splitter = RecursiveCharacterTextSplitter( | |
| chunk_size=CHUNK_SIZE, | |
| chunk_overlap=CHUNK_OVERLAP, | |
| separators=["\n\n", "\n", ". ", " ", ""], | |
| ) | |
| chunks = [] | |
| chunk_number = 1 | |
| for page in pages: | |
| page_chunks = splitter.split_text(page["text"]) | |
| for chunk_text in page_chunks: | |
| chunks.append( | |
| { | |
| "text": chunk_text, | |
| "chunk_id": chunk_number, | |
| "page_number": page["page_number"], | |
| "source_file": page["source_file"], | |
| "extraction_method": page.get("extraction_method", "embedded_text"), | |
| "ocr_mode": page.get("ocr_mode", "not_used"), | |
| "ocr_engine": page.get("ocr_engine", "not_used"), | |
| } | |
| ) | |
| chunk_number += 1 | |
| if not chunks: | |
| raise ValueError("The uploaded notes could not be split into text chunks.") | |
| return chunks | |