Сервис для частотного анализа слов в текстовых файлах. Загрузите текстовый файл любого размера (до 1 ГБ) и получите детальную статистику по словоформам в формате Excel.
- Обработка больших файлов – потоковое чтение файлов размером до 1 ГБ без перегрузки памяти.
- Умная нормализация – приводит слова к единой словоформе (например, «житель» и «жителем» считаются одним словом).
- Детальная статистика – результат содержит:
- Словоформу
- Общее количество вхождений в документе
- Количество вхождений в каждой строке (в виде строки:
0,11,32,0,0,3)
- Асинхронная обработка – не блокирует систему при одновременной работе нескольких пользователей.
- Docker‑ready – простое развертывание с помощью Docker Compose.
| Компонент | Назначение |
|---|---|
| FastAPI | Веб-фреймворк для API |
| Uvicorn | ASGI-сервер для асинхронной обработки |
| OpenPyXL | Генерация Excel-файлов без MS Office |
| Aiofiles | Асинхронная работа с файлами |
| Python‑Multipart | Обработка загружаемых файлов |
| Docker | Контейнеризация приложения |
git clone https://github.com/kite-house/testwork_kaspersky.git
cd testwork_kasperskydocker-compose up -d --buildПосле запуска API будет доступно по адресу: http://localhost:8000
-
Создайте виртуальное окружение:
python -m venv venv source venv/bin/activate # Linux/Mac .\venv\Scripts\activate # Windows
-
Установите зависимости:
pip install -r requirements.txt
-
Запустите сервер:
uvicorn main:app --host 0.0.0.0 --port 8000 --reload
POST /public/report/export
| Параметр | Тип | Описание |
|---|---|---|
file |
UploadFile |
Текстовый файл (.txt) для анализа |
curl -X POST "http://localhost:8000/public/report/export" \
-F "file=@/path/to/your/file.txt" \
--output statistics.xlsxУспешный ответ – Excel-файл (application/vnd.openxmlformats-officedocument.spreadsheetml.sheet) с тремя колонками:
| Словоформа | Кол-во во всем документе | Кол-во в каждой строке |
|---|---|---|
| привет | 5 | 2,0,1,2,0 |
| мир | 3 | 1,1,0,0,1 |
testwork_kaspersky/
├── application/ # Слой бизнес-логики
│ └── services.py # Сервис обработки статистики
├── core/ # Конфигурация
│ └── config.py # Настройки приложения
├── domain/ # Доменный слой
│ └── entities.py # Сущности и нормализатор слов
├── infrastructure/ # Инфраструктурный слой
│ ├── excel_generator.py # Генерация Excel
│ └── file_handler.py # Потоковое чтение файлов
├── presentation/ # Слой представления
│ └── routes.py # API маршруты
├── .dockerignore
├── .gitignore
├── Dockerfile
├── docker-compose.yml
├── main.py # Точка входа
└── requirements.txt
Для проверки работоспособности используйте тестовый файл:
echo "привет мир" > test.txt
echo "привет мир мир" >> test.txt
curl -X POST "http://localhost:8000/public/report/export" \
-F "file=@test.txt" \
--output result.xlsxПроверка состояния сервиса:
curl http://localhost:8000/health| Переменная | Значение по умолчанию | Описание |
|---|---|---|
MAX_FILE_SIZE_MB |
1024 | Максимальный размер файла (МБ) |
MAX_CONCURRENT_TASKS |
5 | Максимальное число одновременных задач |
TMP_DIR |
/tmp/fastapi |
Директория для временных файлов |
Разработано в рамках тестового задания для Kaspersky.