41 lines
1.5 KiB
Python
41 lines
1.5 KiB
Python
<|channel|>final code<|message|>```python
|
|
# chunker.py
|
|
"""
|
|
Модуль для разбиения больших текстов на небольшие чанки.
|
|
Использует RecursiveCharacterTextSplitter из LangChain.
|
|
|
|
Публичный API:
|
|
split_text(text: str, chunk_size: int = 1000, chunk_overlap: int = 200) -> List[str]
|
|
"""
|
|
|
|
from typing import List
|
|
from langchain.text_splitter import RecursiveCharacterTextSplitter
|
|
|
|
|
|
def split_text(
|
|
text: str,
|
|
*,
|
|
chunk_size: int = 1000,
|
|
chunk_overlap: int = 200,
|
|
) -> List[str]:
|
|
"""
|
|
Разбивает входной текст на чанки заданного размера с перекрытием.
|
|
|
|
Args:
|
|
text: Текст, который нужно разбить.
|
|
chunk_size: Максимальная длина одного чанкa (по символам).
|
|
chunk_overlap: Количество символов, которые будут пересекаться между
|
|
соседними чанками. Позволяет сохранить контекст при поиске.
|
|
|
|
Returns:
|
|
Список строк – чанков текста.
|
|
"""
|
|
if not isinstance(text, str):
|
|
raise TypeError("text must be a string")
|
|
|
|
splitter = RecursiveCharacterTextSplitter(
|
|
chunk_size=chunk_size,
|
|
chunk_overlap=chunk_overlap,
|
|
separators=["\n\n", "\n", " ", ""],
|
|
)
|
|
return splitter.split_text(text) |