muryshev's picture
init
b24d496
raw
history blame
2.62 kB
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