Patrol / garant.py
Mariia5's picture
Update garant.py
cfff812 verified
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