ИИ без LLM: казахская модель с нуля Урок 13 из 20
Урок 13. Находим предмет вопроса
Если в библиотеке спросить «Когда открывается шахматный клуб?», библиотекарь сначала должен понять, о каком клубе речь. В нашей вымышленной учебной школе есть два названия занятий: Шахмат и Сурет («рисование»). Название, о котором спрашивают, назовём предметом вопроса. В программах его часто называют *сущностью*: это конкретный объект, который мы хотим найти в каталоге.
Текст переведён с помощью ИИ.
Зачем это нужно
Если в библиотеке спросить «Когда открывается шахматный клуб?», библиотекарь сначала должен понять, о каком клубе речь. В нашей вымышленной учебной школе есть два названия занятий: Шахмат и Сурет («рисование»). Название, о котором спрашивают, назовём предметом вопроса. В программах его часто называют сущностью: это конкретный объект, который мы хотим найти в каталоге.
Весь шаг сразу
Пока принимаем только названия без окончаний. Урок 11 показал, что окончания можно разбирать, но правила для названий занятий мы ещё не записали. Сначала создадим список найденных названий, чтобы не потерять ситуацию с двумя занятиями в одном вопросе.
text сохранит вопрос маленькими буквами, clean — тот же вопрос без ? и ,; затем words будет списком его слов. Две новые команды до кода: for проходит по элементам списка по очереди; append добавляет элемент в конец другого списка. Отступ покажет, какие строки повторяются.
Создайте entities.py в UTF-8 и запустите его.
known = ["шахмат", "сурет"]
text = input("Сұрақ: ").lower()
clean = text.replace("?", "").replace(",", "")
words = clean.split()
found = []
for word in words:
if word in known:
found.append(word)
print(found)
Исполняемый файл шага совпадает с напечатанным кодом.
found = [] создаёт пустой список — как пустой лист для найденных названий. for word in words: означает «для каждого слова из списка по очереди». Двоеточие и четыре пробела отмечают действия, которые повторяются. Внутренний if с восемью пробелами проверяет каждое слово. found.append(word) добавляет подходящее слово в конец списка. После цикла print(found) без отступа выполняется один раз. Маленькие буквы, замена двух знаков и split() уже были в уроке 7; in — в уроке 8. Здесь повторения слова сохраняются как отдельные находки; пока мы их не склеиваем.
Для Шахмат қашан? результат ['шахмат']. Для Шахмат, сурет қашан? — ['шахмат', 'сурет']. Для Робот қашан? — []: мы не внесли Робот в этот маленький словарь, хотя человеку название знакомо. Пустой список означает «не найдено в нашем каталоге», а не «такого занятия не существует». Программа ещё не ищет время занятия.
Опорная карта
Вопрос → маленькие буквы и два знака препинания → слова → пройти по каждому → сравнить с двумя известными названиями → список находок.
Восстановите и проверьте
Закройте код и объясните, почему print(found) стоит без отступа. Затем запустите Сурет қайда?, Шахмат, сурет қашан? и Робот қайда?.
Задание: предскажите результат для СУРЕТ қашан? и Шахмат шахмат қашан?. Подсказка: lower() не удаляет повторение. Эталон: ['сурет'] и ['шахмат', 'шахмат']. Повторения мы научимся обрабатывать отдельно. Частая ошибка: поставить print(found) внутри цикла: тогда вместо одного итогового списка экран покажет промежуточное состояние после каждого слова.
Если вы нашли ошибку или опечатку в тексте статьи, то сообщите нам об этом
Комментарии (0)
Войдите, чтобы оставить комментарий →
Пока нет комментариев. Будьте первым.