Skip to content

Halva773/Fuzzy-search

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Нечеткий поиск

Alt

Запуск через Docker

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 вида алгоритма:

  • Расстояние Левенштейна
  • Хеширование по сигнатуре

Этапы реализации

  1. Базовая реализация с использованием HTTP-протоколов (GET, POST)
  2. Интеграция веб-сокетов для real-time взаимодействия
  3. Внедрение 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")
Позволяет указать слово (для поиска), тип алгоритма (которым можно искать), корпус (который можно использовать) и возвращает время работы алгоритма + результат поиска.

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •