|
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): |
|
|
|
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 |
|
|