Парсер: ФИО из трёх слов после предмета, порядок «Имя Отчество Фамилия»
В субботу у ПИЭ-41/42БО в название курса попадало «Денис»: правило разбиения забирало в преподавателя только два последних слова, а здесь их три («Основы тестирования веб-приложений Денис Сергеевич Верховцев (Сигма)»). - правило ФИО в конце строки теперь берёт 2–3 слова и использует нежадный префикс, поэтому первые слова предмета не «съедаются»; - добавлена проверка, что это действительно человек: для трёх слов нужно отчество (-вич/-вна), для двух — «фамильное» окончание, иначе название вроде «Введение в Машинное Обучение» в преподаватели не уедет; - ключ преподавателя собирается в обоих порядках («Верховцев Денис Сергеевич» и «Денис Сергеевич Верховцев») -> «Верховцев Д.С.»; организация вроде «ПравоТех» больше не теряется. Проверено на живой таблице: предмет чистый, в списке преподавателей появился «Верховцев Д.С.», подозрительных ФИО по всем группам нет. Тесты: 168.
This commit is contained in:
@@ -384,6 +384,14 @@ def test_inline_lesson_after_room_no_blank_line():
|
||||
assert ls[1]["room"] == "ауд. 231"
|
||||
|
||||
|
||||
def test_full_name_three_words_after_subject():
|
||||
"""«Предмет Денис Сергеевич Верховцев (Сигма)» — ФИО не должно попасть в предмет."""
|
||||
result = one("Основы тестирования веб-приложений Денис Сергеевич Верховцев (Сигма)\nонлайн")
|
||||
assert result["subject"] == "Основы тестирования веб-приложений"
|
||||
assert result["teacher"] == "Денис Сергеевич Верховцев (Сигма)"
|
||||
assert result["room"] == "онлайн"
|
||||
|
||||
|
||||
def test_plain_time_paren_line():
|
||||
result = one("Параллельное программирование (пр)\nМещеряков И.А.\nауд. 213\n(начало пары в 12:30)")
|
||||
assert result["note"] == "начало пары в 12:30"
|
||||
@@ -420,3 +428,20 @@ def test_inline_note_stays_with_its_lesson():
|
||||
ls = lessons(raw)
|
||||
assert ls[0]["note"] == "с 7.09 по 20.09 пары не будет"
|
||||
assert ls[1]["note"] == ""
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"teacher, expected",
|
||||
[
|
||||
("Верховцев Денис Сергеевич", ["Верховцев Д.С."]),
|
||||
("Денис Сергеевич Верховцев", ["Верховцев Д.С."]),
|
||||
("Денис Верховцев (Сигма)", ["Верховцев Д."]),
|
||||
("Лабеев Игорь Владимирович", ["Лабеев И.В."]),
|
||||
("ПравоТех", ["ПравоТех"]),
|
||||
],
|
||||
)
|
||||
def test_teacher_keys_order(teacher, expected):
|
||||
"""Ключ преподавателя — «Фамилия И.О.» в любом порядке ФИО в таблице."""
|
||||
from schedule.lessons import extract_teacher_names
|
||||
|
||||
assert extract_teacher_names(teacher) == expected
|
||||
|
||||
Reference in New Issue
Block a user