git clone https://github.com/Halva773/Fuzzy-search.git # Клонирование репозитория
cd Fuzzy-search # Переходим в папку с проектом
cp .env.example .env # Создаём файл .env на основе примера
Файл .env используется в проекте, но не опубликован на гите. Примером файла служит .env.exmaple. После создания можете поменять необходимые вам ключи и переменные
docker build . -t fuzzy-search
docker run -p 8000:8000 -t fuzzy-search
Алгоритмы нечеткого поиска являются основой систем проверки орфографии и полноценных поисковых систем вроде Google или Yandex. Например, такие алгоритмы используются для функций наподобие «Возможно вы имели в виду …» в тех же поисковых системах. К ознакомлению
Реализовано 2 вида алгоритма:
- Расстояние Левенштейна
- Хеширование по сигнатуре
- Базовая реализация с использованием HTTP-протоколов (GET, POST)
- Интеграция веб-сокетов для real-time взаимодействия
- Внедрение Redis и Celery для асинхронного выполнения задач
- Использование FastAPI в качестве веб-фреймворка
- SQLite как база данных
- SQLAlchemy для ORM (Object-Relational Mapping)
- Реализация авторизации по email и паролю
- Аутентификация с использованием JWT (JSON Web Tokens)
project/
├── app/
│ ├── api/ # эндпоинты
│ ├── core/ # config
│ ├── db/ # файл базы данных и сессия подключения
│ ├── models/ # модели для базы данных
│ ├── cruds/ # ORM CRUD операции
│ ├── schemas/ # схемы запросов
│ ├── services/ # доп. сервисы, в нашем случае тут будет лежать логика под лабы
│ └── main.py
├── alembic/
└── .env
@router.post("/sign-up/") Проверяет, не зарегистрирован ли уже пользователь с таким email. Если нет, создает нового пользователя и генерирует для него токен. Возвращает данные созданного пользователя.
@router.post("/login/") Проверяет существование пользователя с указанным email. Проверяет правильность введенного пароля. Если все верно, генерирует новый токен для пользователя. Возвращает данные пользователя с новым токеном.
@router.get("/users/me/") Возвращает данные авторизованного пользователя.
Данные о пользователе должны сохраняться в базу данных для чего вам надо написать круды. Необходимо пользоваться alembic для миграции базы данных.
@app.post("/upload_corpus")
Загружает корпус текста для индексации и поиска.
@app.get("/corpuses")
Возвращает список корпусов c идентификаторами.
@app.post("/search_algorithm")
Позволяет указать слово (для поиска), тип алгоритма (которым можно искать), корпус (который можно использовать) и возвращает время работы алгоритма + результат поиска.