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
|