File size: 6,070 Bytes
3478195
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cf52a68
3478195
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cfff812
3478195
cfff812
 
3478195
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
import re


garant_pdf_regex = [
    "\d+(?:\.\d{2})?%",

    "\d+(?:\.\d{2})? Российский рубль",
    "((?:не требуется)|(?:не установлены))"
]


def normalize_whitespaces(text):
    return re.sub("\s+", "", text).lower()


value1 = normalize_whitespaces('Обеспечение гарантийных обязательств')
value2 = normalize_whitespaces('Обеспечение гарантийных')


def detect_garant_pdf(pdf_blocks, debug_print):
    garant_pdf = None

    for i, block in enumerate(pdf_blocks):
        check = (
                value1 in normalize_whitespaces(block)
                and value1 in normalize_whitespaces(pdf_blocks[i + 1])
                or value2 in normalize_whitespaces(block)
                and value2 in normalize_whitespaces(pdf_blocks[i + 1])
        )
        if check:
            text = re.sub("\s+", " ", pdf_blocks[i + 1])
            if "не требуется" in text:
                garant_pdf = "не требуется"
            elif "не" in text:
                garant_pdf = "не требуется"
            else:
                paragraphs_to_check = pdf_blocks[i + 2] + "\n" + pdf_blocks[i + 3]
                if debug_print:
                    print("PDF_TEXT", paragraphs_to_check)
                    print("-" * 70)
                for val in garant_pdf_regex:
                    if garant_pdf := re.findall(val, paragraphs_to_check):
                        garant_pdf = garant_pdf[0]
                        break
    return garant_pdf



docx_regex = [
    "\d+(?:[.,]\d{1})? ?%",
    r"\d+(?:[.,]\d{1})? ?процент",
    "(\d{1,3} ?%) начальной",
    "не установлен(?:ы|о)",
    "не устанавливается",
    "(\d{1,3} ?%) от начальной",
    "(\d{1,3} ?%) от цены",
    "(\d{1,3} ?%) процент",
    "\d{1,3} процент",
    ]


def detect_garant_doc(paragraphs, debug_print=False):
    garant_docx = None

    for i, docpara in enumerate(paragraphs):
        if "Обеспечение гарантийных обязательств" == docpara:
            text = paragraphs[i + 1].removeprefix("10. Обеспечение гарантийных обязательств")
            if debug_print:
                print("DOCX_TEXT", text)
                print("-" * 70)
            for val in docx_regex:
                if garant_docx := re.findall(val, text):
                    break
        else:
            for string in [
                "размер обеспечения гарантийных обязательств",
                "обеспечение гарантийных обязательств в размере",
                "требования к обеспечению гарантийных обязательств не установлены",
                "обеспечение гарантийных обязательств не устанавливается",
                "размер обеспечения гарантийных обязательств",
                "обеспечения гарантийных обязательств в размере",
                "обеспечение гарантийных обязательств устанавливается в размере"

            ]:
                if not garant_docx and string.lower() in docpara.lower():
                    for val in docx_regex:
                        if garant_docx := re.findall(val, paragraphs[i]):
                            break

    if garant_docx:
        garant_docx = (
            garant_docx[0]
            .replace("процент", "%")
            .replace(",", ".")
        )
    return garant_docx


docx_regex_price = [
                    r"\d[\d ]+(?:[.,] ?\d{2})? ?руб",
                    "\d{1,3}(?:\s\d{3})*(?:\,\d+)? ?руб",
                     "\d{1,3}(?:\s\d{3})*(?:\.\d+)? ?руб",
                    "не установлен(?:ы|о)",
                    "не устанавливается" ,
]


def detect_garant_doc_price(paragraphs, debug_print=False):
    price_doc = None
    for i, docpara in enumerate(paragraphs):
        if "Обеспечение гарантийных обязательств" == docpara:
            text = paragraphs[i + 1].removeprefix("10. Обеспечение гарантийных обязательств")
            for val in docx_regex_price:
                if price_doc := re.findall(val, text):
                    # return text
                    if debug_print:
                        print("GARANT_DOC_PRICE: ", text)
                    break

        else:
            for string in [
                "размер обеспечения гарантийных обязательств",
                "обеспечение гарантийных обязательств в размере",
                "требования к обеспечению гарантийных обязательств не установлены",
                "обеспечение гарантийных обязательств не устанавливается",
                "размер обеспечения гарантийных обязательств",
                "обеспечения гарантийных обязательств в размере",
                "подлежит предоставлению обеспечение гарантийных обязательств в размере"
            ]:
                if not price_doc and string.lower() in docpara.lower():
                    for val in docx_regex_price:
                        if price_doc := re.findall(val, paragraphs[i]):
                            if debug_print:
                                print("GARANT_DOC_PRICE:  ", paragraphs[i])
                            break
    if not price_doc:
        price_doc = None
    else:
        price_doc = price_doc[0]
    return price_doc