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