second commit

This commit is contained in:
2025-09-11 10:47:21 +03:00
parent 32954fcd59
commit b62640e39b
5 changed files with 6448 additions and 14 deletions

View File

@@ -26,7 +26,7 @@ def parse_all_dirt(sh, min_pos, right, down):
RET = set()
row = min_pos.row
while row <= min_pos.row + down:
while row < min_pos.row + down:
col = min_pos.col
while col < min_pos.col + right:
#print(excel_coordinate(row, col))
@@ -38,6 +38,60 @@ def parse_all_dirt(sh, min_pos, right, down):
return RET
import re
# GEMINI
def normalize_name(raw_name):
"""
Приводит разнородные записи ФИО к единому структурированному виду.
"""
# Шаг 1: Очистка
name = re.sub(r'\s+', ' ', raw_name).strip()
# Шаг 2: Извлечение звания
known_titles = ['проф.', 'доц.', 'акад.', 'к.т.н.', 'д.м.н.']
title = None
for t in known_titles:
if name.lower().startswith(t):
title = t
# Удаляем звание из строки, убираем лишние пробелы
name = name[len(t):].strip()
break
# Шаг 3 и 4: Разделение и идентификация
parts = name.split(' ')
last_name = None
initials = None
# Простой эвристический анализ
# Ищем инициалы (содержат точку или состоят из 1-2 заглавных букв)
initials_parts = []
name_parts = []
for part in parts:
if '.' in part or (1 <= len(part) <= 2 and part.isupper()):
initials_parts.append(part)
else:
# Считаем все остальное частью фамилии (для двойных фамилий)
name_parts.append(part)
if name_parts:
last_name = " ".join(name_parts)
if initials_parts:
initials = "".join(initials_parts) # Сливаем "А." и "Н." в "А.Н."
# Если фамилия не найдена (например, только инициалы),
# но есть части, считаем первую часть фамилией
if not last_name and name_parts:
last_name = name_parts[0]
return {
"last_name": last_name,
"initials": initials,
"title": title
}
def excel_coordinate(row, col):
"""
Преобразует координаты строки и столбца (начиная с 0) в эквивалент Excel (например, A7, CB34).
@@ -94,4 +148,23 @@ def find(sh, query = None):
return rx, i
i += 1
return None
return None
def weekday_to_num(st: str):
if st.upper().strip() == "ПОНЕДЕЛЬНИК":
return 1
if st.upper().strip() == "ВТОРНИК":
return 2
if st.upper().strip() == "СРЕДА":
return 3
if st.upper().strip() == "ЧЕТВЕРГ":
return 4
if st.upper().strip() == "ПЯТНИЦА":
return 5
if st.upper().strip() == "СУББОТА":
return 6
if st.upper().strip() == "ВОСКРЕСЕНЬЕ":
return 7
return -1