Spaces:
Running
Running
| from typing import List, Dict | |
| def _tokenize(text: str) -> List[str]: | |
| return text.split() | |
| def chunk_documents( | |
| documents: List[Dict[str, str]], | |
| chunk_size_tokens: int = 420, | |
| chunk_overlap_tokens: int = 80, | |
| ) -> List[Dict[str, str]]: | |
| chunks: List[Dict[str, str]] = [] | |
| step = max(1, chunk_size_tokens - chunk_overlap_tokens) | |
| for doc in documents: | |
| tokens = _tokenize(doc["text"]) | |
| if not tokens: | |
| continue | |
| i = 0 | |
| chunk_id = 0 | |
| while i < len(tokens): | |
| window = tokens[i : i + chunk_size_tokens] | |
| if not window: | |
| break | |
| chunk_text = " ".join(window) | |
| chunks.append( | |
| { | |
| "id": f"{doc['source']}::chunk_{chunk_id}", | |
| "source": doc["source"], | |
| "text": chunk_text, | |
| } | |
| ) | |
| chunk_id += 1 | |
| i += step | |
| return chunks | |