Shanraq.org Shanraq.org
IT

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-проект не установлен, первый опыт полностью работает сам.

Исходный проект qazaq-ir.

Из корня проекта перейдите в папку шага и запустите программу:

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)

Пока нет комментариев. Будьте первым.