File size: 1,729 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
50
"""
Класс для представления документа как сущности.
"""

from dataclasses import dataclass

from .linker_entity import LinkerEntity, register_entity


@register_entity
@dataclass
class DocumentAsEntity(LinkerEntity):
    """
    Класс для представления документа как сущности в системе извлечения и сборки.
    """

    doc_type: str = "unknown"
    
    @classmethod
    def deserialize(cls, data: LinkerEntity) -> 'DocumentAsEntity':
        """
        Десериализует DocumentAsEntity из объекта LinkerEntity.
        
        Args:
            data: Объект LinkerEntity для преобразования в DocumentAsEntity
            
        Returns:
            Десериализованный объект DocumentAsEntity
        """
        metadata = data.metadata or {}
        
        # Получаем тип документа из метаданных или используем значение по умолчанию
        doc_type = metadata.get('_doc_type', 'unknown')
        
        # Создаем чистые метаданные без служебных полей
        clean_metadata = {k: v for k, v in metadata.items() if not k.startswith('_')}
        
        return cls(
            id=data.id,
            name=data.name,
            text=data.text,
            in_search_text=data.in_search_text,
            metadata=clean_metadata,
            source_id=data.source_id,
            target_id=data.target_id,
            number_in_relation=data.number_in_relation,
            type="DocumentAsEntity",
            doc_type=doc_type
        )