Spaces:
Sleeping
Sleeping
File size: 2,159 Bytes
86c402d |
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 38 39 40 41 42 43 44 45 46 47 48 49 |
"""
Класс для представления чанка документа.
"""
from dataclasses import dataclass
from .linker_entity import LinkerEntity, register_entity
@register_entity
@dataclass
class Chunk(LinkerEntity):
"""
Класс для представления чанка документа в системе извлечения и сборки.
Attributes:
chunk_index: Порядковый номер чанка в документе (0-based).
Используется для восстановления порядка при сборке.
"""
chunk_index: int | None = None
@classmethod
def deserialize(cls, data: LinkerEntity) -> 'Chunk':
"""
Десериализует Chunk из объекта LinkerEntity.
Базовый класс Chunk не должен использоваться напрямую,
все конкретные реализации должны переопределить этот метод.
Args:
data: Объект LinkerEntity для преобразования в Chunk
Raises:
NotImplementedError: Метод должен быть переопределен в дочерних классах
"""
if cls == Chunk:
# Если это прямой вызов на базовом классе Chunk, выбрасываем исключение
raise NotImplementedError(
"Базовый класс Chunk не поддерживает десериализацию. "
"Используйте конкретную реализацию Chunk (например, FixedSizeChunk)."
)
# Если вызывается из дочернего класса, который не переопределил метод,
# выбрасываем более конкретную ошибку
raise NotImplementedError(
f"Класс {cls.__name__} должен реализовать метод deserialize."
)
|