File size: 1,989 Bytes
e2e8616
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
51
52
53
54
55
56
57
58
import math

class Block:
    def __init__(self, doc: str= '',title: str = '', content: str = '',
                 index: str = '', rank: int = 0, level: int = 0, distance: float = 99999):
        self.doc = doc
        self.title = title
        self.content = content
        self.index = index
        self.rank = rank
        self.level = level
        self.distance = distance

    @property
    def distance_str(self) -> str:
        return format(self.distance, '.2f')

    def separate_1_block_in_n(self, max_size=4500):
        """
        Separate a block in n blocks of equal size
        """
        content_length = len(self.content)
        n = math.ceil(content_length / max_size)
        block_size = content_length // n
        new_blocks = []
        for i in range(n):
            start = i * block_size
            end = (i + 1) * block_size if i < n - 1 else None
            new_blocks.append(Block(doc=self.doc,
                                    title=self.title + f"_part{i}",
                                    content=self.content[start:end],
                                    index=self.index + f"_{i}",
                                    rank=self.rank,
                                    level=self.level))
        return new_blocks


    def to_dict(self) -> {}:
        block_dict = {'doc': self.doc,
                      'title': self.title,
                      'content': self.content,
                      'index': self.index,
                      'rank': self.rank,
                      'level': self.level,
                      'distance': self.distance}
        return block_dict

    def from_dict(self, block_dict: {}):
        self.doc = block_dict['doc']
        self.title = block_dict['title']
        self.content = block_dict['content']
        self.index = block_dict['index']
        self.rank = block_dict['rank']
        self.level = block_dict['level']
        self.distance = block_dict['distance']
        return self