AI без LLM: создаем свою модель ИИ Урок 26 из 30
Урок 26. Сравниваем учебный разбор с qazaq-ir
Два мастера могут разобрать один велосипед: новичок отмечает три знакомые детали, мастерская фиксирует ещё состояние каждого узла. Сравнивать полезно только совпадающие части работы. Наш урок 11 узнаёт две заранее заданные формы; qazaq-ir — отдельный Rust-проект, который возвращает JSON с корнем, цепочкой окончаний и состоянием анализа. Он не является источником расписания кружка.
Текст переведён с помощью ИИ.
Зачем это нужно
Два мастера могут разобрать один велосипед: новичок отмечает три знакомые детали, мастерская фиксирует ещё состояние каждого узла. Сравнивать полезно только совпадающие части работы. Наш урок 11 узнаёт две заранее заданные формы; qazaq-ir — отдельный Rust-проект, который возвращает JSON с корнем, цепочкой окончаний и состоянием анализа. Он не является источником расписания кружка.
Перед кодом
Программа всегда показывает учебный разбор мектептерімізде → мектеп + тер + іміз + де. Второй опыт необязателен. sys.argv — список слов команды: первый элемент обозначает программу, следующий может быть путём к исполняемому файлу qazaq-ir. Path(...).is_file() проверяет существование файла. subprocess.run запускает внешнюю программу; список аргументов передаётся без оболочки. capture_output=True сохраняет её вывод, text=True делает его текстом, check=False оставляет проверку ошибки нам. timeout=10 ограничивает ожидание, returncode сообщает об успехе. json.loads читает её JSON, а tokens — список разобранных слов. Если Rust-проект не установлен, первый опыт полностью работает сам.
Из корня проекта перейдите в папку шага и запустите программу:
cd course/kazakh-ai/step-26
python3 compare.py
В Windows замените python3 на py.
import json
import subprocess
import sys
from pathlib import Path
word = "мектептерімізде"
ours = {"root": "мектеп", "parts": ["тер", "іміз", "де"]}
print("Оқу үлгісі:", word, "→", ours["root"], ours["parts"])
if len(sys.argv) == 1:
print("qazaq-ir: қосымша салыстыру іске қосылмады")
else:
binary = Path(sys.argv[1])
if not binary.is_file():
print("qazaq-ir: бағдарлама файлы табылмады")
else:
run = subprocess.run([str(binary), "analyze", "--format", "compact", word],
text=True, capture_output=True, timeout=10, check=False)
if run.returncode != 0:
print("qazaq-ir: іске қосу қатесі")
else:
result = json.loads(run.stdout)
for token in result["tokens"]:
print("qazaq-ir:", token["surface"], "→", token["root"],
token["analysis_status"])
Что делает программа
Без второго аргумента программа печатает qazaq-ir: қосымша салыстыру іске қосылмады. Для дополнительной проверки соберите официальный репозиторий командой cargo build --release -p qazaq-ir-cli и передайте путь к полученному файлу target/release/qazaq-ir (в Windows — .exe). Это отдельная установка Rust; курс Python от неё не зависит. При проверке локальной версии qazaq-ir 0.31.0 эта форма дала root: мектеп и analysis_status: partial: корень найден, но полный разбор не подтверждён. В другой версии результат может измениться. В JSON проекта сравните root и analysis_status, а не делайте вывод о «лучшем ИИ» из одной формы. Даже если корни совпали, это не проверяет ответ на вопрос или источник факта.
Опорная карта
Одно слово → учебный разбор → по желанию CLI qazaq-ir → сравнение корня и статуса → назвать границы обоих опытов.
Вспомните и проверьте
Закройте код и восстановите, какой вывод гарантирован без Rust: Оқу үлгісі: мектептерімізде → мектеп ['тер', 'іміз', 'де'] и сообщение о пропущенном сравнении. Подсказка: ветка len(sys.argv) == 1. Запустите затем с заведомо неверным путём: появится бағдарлама файлы табылмады. Частая ошибка: принимать совпадение корня за подтверждение расписания. Разбор слова и проверка факта — разные этапы.
Если вы нашли ошибку или опечатку в тексте статьи, то сообщите нам об этом
Комментарии (0)
Войдите, чтобы оставить комментарий →
Пока нет комментариев. Будьте первым.