Spaces:
Sleeping
Sleeping
import re | |
def tokenize(text: str) -> list[str]: | |
# Удаляем пунктуацию и приводим текст к нижнему регистру | |
text = re.sub(r'[^\w\s]', '', text.lower()) | |
return text.split() | |
def use_rules(query: str, terms: list[str]) -> bool: | |
query_tokens = tokenize(query) | |
pairs = [ | |
( | |
['написать', 'отразить', 'заполнить', 'сформулировать', 'составить', 'отражать', 'заполнять'], | |
['как', 'каким'] | |
), | |
( | |
['заполнения', 'написания', 'составления', 'формулирования', 'отражения', 'расчета', 'расчёта'], | |
['правила', 'порядок'] | |
), | |
( | |
['написать', 'отразить', 'заполнить', 'сформулировать', 'составить', 'отразить'], | |
['нужно', 'необходимо', 'требуется'] | |
), | |
( | |
[r'заполнени\w', r'написани\w', r'составлени\w', r'формулировани\w', | |
r'формулировк\w', r'отражени\w', r'расчет\w?', r'расчёт\w?'], | |
['описать'] | |
), | |
( | |
['заполнение', 'написание', 'составление', 'формулирование', 'отражение', 'расчет', 'расчёт', | |
'формулировка'], | |
[r'корректн\w\w?', r'корректность'] | |
), | |
( | |
['заполнению', 'написанию', 'составлению', 'формулированию', 'отражению', 'расчету', 'расчёту', | |
'формулировке'], | |
['рекомендации по'] | |
) | |
] | |
for first_list, second_list in pairs: | |
first_positions = [] | |
second_positions = [] | |
for i, token in enumerate(query_tokens): | |
for first_item in first_list: | |
if re.fullmatch(first_item, token): | |
first_positions.append(i) | |
for second_item in second_list: | |
if re.fullmatch(second_item, token): | |
second_positions.append(i) | |
for pos1 in first_positions: | |
for pos2 in second_positions: | |
if abs(pos1 - pos2) <= 3: | |
return True | |
for term in terms: | |
if term.lower() in query.lower(): | |
return True | |
return False |